REF: clearer Categorical/CategoricalIndex construction
Construction ATM of ``Categorical`` and ``CategoricalIndex`` each uses their own ways to construct the dtype. This makes the construction look more complex than it need to.

By collecting the dtype construction in a shared function, a lot of things become more simple. An additional advantage is that we can now have a higher confidence in dtype being the same for the same inputs, easing reasoning about the construction phase.

The above is all internal changes, so no whatsnew note is supplied.

A very minor issue was discovered, where an error message for CategoricalDtype made it look like the problem was in ``CategoricalIndex``, which is confusing, especially if we're not constructing a ``CategoricalIndex``.

```python
>>> pd.api.type.CategoricalDtype('category')
TypeError: CategoricalIndex(...) must be called with a collection of some kind, 'category' was passed  # master
TypeError: Parameter 'categories' must be list-like, was 'category'  # this PR
```

Otherwise the API is unchanged, but the code paths are now much simpler IMO.