ENH: Add IntervalDtype support to IntervalIndex.astype
- [X] closes #19197
- [X] tests added / passed
- [X] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [X] whatsnew entry

Summary:
  - Added support for `IntervalIndex.astype(IntervalDtype(...))`
       - Allows for subtype conversion, e.g. `interval[int64]` --> `interval[float64]`
  - Created a new `/interval/test_astype.py` file for the tests
      - Similar to how these tests were split into a separate file for `/datetimes`, and `/timedeltas`
      - Created a base class to hold tests that are common to any subtype
      - Created separate subtypes classes that hold tests for behavior unique to the subtype
      - Significantly expanded the `astype` related tests for `IntervalIndex`
      - Didn't parametrize over `closed`, since it doesn't really come into play for `astype`, though each variation of closed is accounted for among the indexes tested
  - Minor fix to `IntervalDtype` class when an invalid subtype comparison is made
     - See comment on the relevant code change for example