PERF: Use Categorical.equals in CategoricalIndex.equals
Avoids a materialization of the full array.

```python
import pandas as pd
import numpy as np
import string


a = pd.CategoricalIndex(np.random.choice(list(string.ascii_letters[:10]), 100_000))
b = a.copy()
c = pd.CategoricalIndex(np.random.choice(list(string.ascii_letters[:10]), 100_000))

print("eq-index")
%timeit a.equals(b)

print("ne-index")
%timeit a.equals(c)
```


timings

case      | master | pr
--------- | ------- | --
eq-index  | 3.35 ms | 420 µs
ne-index  | 1.29 ms | 451 µs
