CLN/BUG: Consolidate Index.astype and fix tz aware bugs
- [X] closes #18704
- [X] closes #18951
- [X] tests added / passed
- [X] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [X] whatsnew entry

Only behavioral changes:
 - Allowed `.astype(str)` on `TimedeltaIndex` and `PeriodIndex`, which previously raised.
    - Couldn't see a reason why it shouldn't be supported. 
 - Fixed issues related to tz-aware conversion in #18951
 - `RangeIndex.astype('int64')` now remains a `RangeIndex`
    - Previously returned a `Int64Index`