PERF: define is_all_dates to shortcut inadvertent copy when slicing an IntervalIndex
State: closed

We get a few orders of magnitude speedup in `IntervalIndex` slicing by simply overriding the base class definition of `is_all_dates`, like all other `Index` derivatives also do. The root cause of the performance degradation is as follows:

- When slicing a `Series`, a new `Series` is created for the result.
- The last step in `Series.__init__()` is `Series._set_axis()`, which in turn calls `.is_all_dates` on the new `Index`
- The base definition of `Index.is_all_dates` is:
```    
@cache_readonly
def is_all_dates(self):
    if self._data is None:
        return False
    return is_datetime_array(ensure_object(self.values))
```
which seems harmless at first glance. However, this eventually invokes `IntervalArray.__array__`, which is a pure Python for-loop creating `Interval` objects and leading to the performance regression here.

As the value of `IntervalIndex.is_all_dates` appears to always be `False`, even in the case of datetime-like left/right values, we simply override to return that value and shortcut the inadvertent copy described above.

### Benchmarks
```
       before           after         ratio
     [ce62a5c1]       [a8f5e90b]
     <interval_index_fix~1>       <interval_index_fix>
        3.42±0.6s          446±0μs    ~0.00  indexing.IntervalIndexing.time_getitem_list
         101±50μs          103±0μs     1.02  indexing.IntervalIndexing.time_getitem_scalar
-      3.80±0.08s          355±0μs     0.00  indexing.IntervalIndexing.time_loc_list
          140±0μs          123±0μs    ~0.88  indexing.IntervalIndexing.time_loc_scalar
```
Speed up of ~10704x for `time_loc_list`

- [x] closes #23576 
- [x] tests added / passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry _(I don't think this regression has been in a release)_


Labels:
name: Performance
description: Memory or execution speed performance
name: Interval
description: Interval data type

Comments:
Hello @qwhelan! Thanks for submitting the PR.

 - There are no PEP8 issues in the file [`pandas/core/indexes/interval.py`](https://github.com/qwhelan/pandas/blob/a8f5e90b9a27237cbba6ecfd4e7222d1414732a4/pandas/core/indexes/interval.py) !

 - There are no PEP8 issues in the file [`pandas/tests/indexes/interval/test_interval.py`](https://github.com/qwhelan/pandas/blob/a8f5e90b9a27237cbba6ecfd4e7222d1414732a4/pandas/tests/indexes/interval/test_interval.py) !


# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/23591?src=pr&el=h1) Report
> Merging [#23591](https://codecov.io/gh/pandas-dev/pandas/pull/23591?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/ce62a5c12069c3ac54c65fdca41d3c0a473b3dfb?src=pr&el=desc) will **increase** coverage by `<.01%`.
> The diff coverage is `100%`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/23591/graphs/tree.svg?width=650&token=eZ4WkYLtcO&height=150&src=pr)](https://codecov.io/gh/pandas-dev/pandas/pull/23591?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master   #23591      +/-   ##
==========================================
+ Coverage   92.25%   92.25%   +<.01%     
==========================================
  Files         161      161              
  Lines       51237    51239       +2     
==========================================
+ Hits        47269    47271       +2     
  Misses       3968     3968
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `90.63% <100%> (ø)` | :arrow_up: |
| #single | `42.29% <50%> (ø)` | :arrow_up: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/23591?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/core/indexes/interval.py](https://codecov.io/gh/pandas-dev/pandas/pull/23591/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhlcy9pbnRlcnZhbC5weQ==) | `94.68% <100%> (+0.01%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/23591?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/23591?src=pr&el=footer). Last update [ce62a5c...a8f5e90](https://codecov.io/gh/pandas-dev/pandas/pull/23591?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

Thanks! I opened https://github.com/pandas-dev/pandas/issues/23598 to investigate removing this implicit casting, but this will be nice if we don't do #23598 for 0.24.0
Thanks @TomAugspurger !