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.

This allows inclusions / manipulation in a nice way fully supporting almost all pandas operations.

ToDO:
- [ ] figure out where ``factor_agg/group_agg`` that live in ``core/frame.py`` really should go (dispatch to categorical is best bet), but where are they called from (except for the tests)

examples in #6242 

more tests for 
- [ ] concat
- [x] astype
- [x] sorting/slcing
- [x] verify / validate numeric ops
- [ ] docs/release notes

closes #5313
closes #5314
closes #3943

Example of usage
```

In [12]:        df = DataFrame({'value': np.random.randint(0, 10000, 100)})

In [13]:         labels = [ "{0} - {1}".format(i, i + 499) for i in range(0, 10000, 500) ]

In [14]:         df = df.sort(columns=['value'], ascending=True)

In [15]:         d = pd.cut(df.value, range(0, 10500, 500), right=False, labels=labels)

In [16]:         s = Series(d)

In [17]:         df['D'] = d

In [18]:         df['E'] = s

In [19]: df.dtypes
Out[19]: 
value       int64
D        category
E        category
dtype: object

In [21]: pd.set_option('display.max_rows',10)

In [22]: df
Out[22]: 
    value            D            E
11      5      0 - 499    500 - 999
86    117      0 - 499  8500 - 8999
63    185      0 - 499  5500 - 5999
39    276      0 - 499  3000 - 3499
55    581    500 - 999  5000 - 5499
..    ...          ...          ...
77   9537  9500 - 9999  8000 - 8499
57   9697  9500 - 9999  5000 - 5499
72   9708  9500 - 9999  7000 - 7499
73   9710  9500 - 9999  7000 - 7499
87   9887  9500 - 9999  8500 - 8999

[100 rows x 3 columns]

In [23]: s

In [23]: s
Out[23]: 
0    0 - 499
1    0 - 499
2    0 - 499
...
97    9500 - 9999
98    9500 - 9999
99    9500 - 9999
Name: value, Length: 100, dtype: category

In [24]: df.sort_index()
Out[24]: 
    value            D            E
0    6783  6500 - 6999      0 - 499
1    1469  1000 - 1499      0 - 499
2    7059  7000 - 7499      0 - 499
3    8872  8500 - 8999      0 - 499
4    9098  9000 - 9499    500 - 999
..    ...          ...          ...
95   2634  2500 - 2999  9500 - 9999
96   4840  4500 - 4999  9500 - 9999
97   6117  6000 - 6499  9500 - 9999
98   7696  7500 - 7999  9500 - 9999
99   2165  2000 - 2499  9500 - 9999

[100 rows x 3 columns]

```
I think this is the same as https://github.com/pydata/pandas/issues/4147
-> If that gets fixed this part should also get fixed...

IMO it should get fixed, as I expected not to get a `inf` from `min()/max`