Categorical type
We extended the CategoricalDtype to accept optional `categories` and `ordered`
argument. CategoricalDtype is now part of the public API. This allows users to
specify the desired categories and orderedness of an operation ahead of time.
The current behavior, which is still possible with `categories=None`, the
default, is to infer the categories from whatever is present.

This change will make it easy to implement support for specifying categories
that are know ahead of time in other places e.g. `.astype`, `.read_csv`, and the
`Series` constructor.

Closes #14711 
Closes #15078
Closes #14676 

Dunno if we would want to do this for 0.20 or not. It ended up not being *too* big a change, so maybe.