Array Interface and Categorical internals Refactor
(edit post categorical-move)

Rebased on master. Summary of the changes from master:

    Added the ExtensionArray class
    Categorical subclasses ExtensionArray

    Implements the new methods for the interface (all private. No public API
    changes)

    Adapted the ExtensionDtype class to be the public ABC
    a. Subclass that with PandasExtensionClass that does non-interface things
    like reprs, caching, etc.
    b. All our custom dtypes inherit from PandasExtensionClass, so they implement
    the interface.
    Internals Changes:
    a. Added an ExtensionBlock. This will be a parent for our current custom
    blocks, and the block type for all 3rd-party extension arrays.
    Added a new is_extension_array_dtype method. I think this is nescessary
    for now, until we've handled DatetimeTZ.

This isn't really a test of whether extension arrays work yet, since we're
still using Categorical for everything. I have a followup PR that implements
an IntervalArray that requires additional changes to, e.g., the constructors
so that things work. But all the changes from core/internals.py required to
make that work are present here.

---


1. New class hierarchy in internals

Old:

```python
class CategoricalBlock(NonConsolidatableMixin, ObjectBlock):
    pass
```

new:

```python
class ExtensionBlock(NonConsolidatableMixin, Block):
   pass

class CategoricalBlock(ExtensionBlock):
    pass
```

Figuring out which methods of `ObjectBlock` were required on `CategoricalBlock`
wasn't trivial for me. I probably messed some up.

I think that eventually we can remove `NonConsolidatableMixin`, with the idea
that all non-consolidatable blocks are blocks for extension dtypes? That's true
today anyway.

Followup PRs:

1. Making `core/arrays/period.py` and refactoring `PeriodIndex`
2. Making `core/arrays/interval.py` and refactoring `IntervalIndex`
3. Adding docs and generic tests like https://github.com/pandas-dev/pandas/pull/19174/files#diff-e448fe09dbe8aed468d89a4c90e65cff for our interface (once it's stabilized a bit).