WIP: categoricals as an internal CategoricalBlock GH5313
This PR creates a `CategoricalBlock` as a first class internal object, on par with blocks like `Datetime,Timedelta,Object,Numeric` etc.

closes #5313
closes #5314
closes #3943

TODOS
- [x]  test with `select_dtypes` #7434, https://github.com/jreback/pandas/commit/a43c6c041c7870c63992bc15b427adc35f7ab5d8

**Code Changes**
- [x] `factor_agg/group_agg` in `core/frame.py` -> look at unittests // a google search didn't turn up any questions/usage -> remove them?
- [x] Add a API change note about the group_agg and factor_agg
- [x] Add a API change note about Categorical.labels -> Categorical.codes
- [x] Printing level information when a Series of type categorical is printed?
- [x] Fix the remaining "FIXME" in tests 
  - [x] Groupby -> include each level, even if group is empty
  - [x] Pivotable -> include each level, even if group is empty
  - [x] `Series(categorical).describe()` / `Categorical.unique()` -> should this return all levels or only used levels?
  - [x] Series(cat).describe() -> show information about the levels?
  - [x] sort by index?
  - [x] df.to_csv: fails due to a slicer error?
  - [x] concat/append -> should retain categoricals
  - [x] concat/append -> should raise on different levels
  - [x] sorting a dataframe by a categorical variable does not use the level ordering
  - [x] sorting by a unsortable categorical should not be possible and should raise
  - [x] reorder_levels: raise if set(old_levels) != set(new_levels)?
  - [x] min/max and numeric_only=True
  - [x] df.to_hdf: fails due to `categorical.T` not implemented
  - [x] `Category.describe()` with empty levels (will be fixed with groupby)
- [x] TST: apply -> look into it if/how it works -> should probably convert first and don't try to preserve the categorical
- [x] TST: def test_sort_dataframe(self): -> sort df, cats must also be sorted!
- [x] TST: Add tests about some more numpy function that should fail
- [x] labels vs. pointers: should the (internal) name of integer array be renamed? -> I would like to see a rename to something with a underscore and it would be nice to rename it to another name (`_pointers`, `_level_idx`, `_level_pointer`)

**Documentation**
- [x] Add release notes
- [x] Add a API change note about the old constructor mode
- [x] Document the Categorical methods
- [x] Link classes/methods in categorical.rst -> not done, just a link to API docs and in special cases.
- [x] Add Categorical API to API docs

**Future**
- [ ] HDF support? -> see above... #7621 
- [ ] meta infos / "Contrasts": R's factor has a "contrast" property which indicates how this factor should be used in statistical models -> don't do it in the PR
