BUG: Ensure Index.astype('category') returns a CategoricalIndex
- [X] closes #18630
- [X] tests added / passed
- [X] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [X] whatsnew entry

Notes:
  - `MultiIndex.astype('category')` raises per @TomAugspurger's comment in the issue.
  - `IntervalIndex.astype('category')` return a `Categorical` with `ordered=True` instead of `CategoricalIndex`, since it looks like someone previously intentionally implemented it this way.  I don't immediately see a reason why, but left it as is.  Would be straightforward to make this consistent and return a `CategoricalIndex`.
  -  All other types of index should return a `CategoricalIndex`.