PERF: Faster comparisons of indexes when compared to self
Examples:

```python
>>> rng = pd.RangeIndex(100_000)
>>> %timeit rng == rng
429 µs ± 96.9 µs per loop  # master
14.1 µs ± 93.8 ns per loop  # this PR
>>> idx = rng.astype(int)
>>> %timeit idx == idx
347 µs ± 1.42 µs per loop  #master
14.1 µs ± 91.4 ns per loop  # this PR
>>> idx = rng.astype(object)
>>> %timeit idx == idx
5.97 ms ± 12.7 µs per loop  # master
3.72 ms ± 28.4 µs per loop  # this PR
```

that works for int dtype, but what about for dtypes that have NAs? Hmm, that’s a good point. I’ll see if anything can be done about that. you could return `~isna()` for equal and `isna()` for not equal (if that is still faster)? > you could return ~isna() for equal and isna() for not equal (if that is still faster)?

even then you'd need to watch out for pd.NA

I think just check for _can_hold_na.

Also for RangeIndex could compare the range objects instead of (i think) casting to ndarray I've made an update. I can't find the tests for index comparisons, they clearly need some tests for comparisons with indexes that contain nans. My first proposal obviously shouldn't have passed.

Anyonw know where they're located? > Anyonw know where they're located?

tests.arithmetic would this let us remove NumericIndex._cmp_method? @topper-123 can you merge master @topper-123 still worth it here? can you merge master This has already been fixed, e.g. the last example:

```python
>>> idx = rng.astype(object)
>>> %timeit idx == idx
5.97 ms ± 12.7 µs per loop  # when this PR was opened
53.9 µs ± 9.8 µs per loop  # master
```

So I'll just close this one.