[WIP]API: CategoricalType for specifying categoricals
closes #14676 

This adds a new top-level class `pd.CategoricalType` for representing the *type* information on a `Categorical`, *without the values*. Users can pass this anywhere they would previously pass `'category'` if they need to specify non-default values for `categories` or `ordered` (you can still use `'category'` of course):

```python
In [1]: from pandas import *

In [2]: paste
    >>> t = CategoricalType(categories=['b', 'a'], ordered=True)
    >>> s = Series(['a', 'a', 'b', 'b', 'a'])
    >>> c = s.astype(t)
    >>> c

## -- End pasted text --
Out[2]:
0    a
1    a
2    b
3    b
4    a
dtype: category
Categories (2, object): [b < a]
```

This is the simplest possible change for now. A bigger change would be to make `c.dtype` return a `CategoricalType` instead of '`category`'. We could probably do that in a way that's backwards compatible, but I'll need to think on it a bit.

Other places this should work

- `select_dtypes` (currently returns all categoricals; should just be ones with same `CategoricalType`?)
- `read_csv`: need to implement, see https://github.com/pandas-dev/pandas/issues/14503
- `Series(..., dtype=...`)
- probably others.

Implementation-wise I need to document, more tests, clean up some things like the repr. But I wanted to get this out there for discussion. @janschulz you might be interested.