PERF: CategoricalDtype.__eq__
Three special cases where we can get better performance

1) categories have different lengths --> never equal
2) categories have different dtypes --> never equal
3) categories are not object-dtype --> can use use get_indexer instead of hashing

```
import pandas as pd
import numpy as np

dti = pd.date_range("2016-01-01", periods=10000, tz="US/Pacific")
dti2 = type(dti)(dti._data.copy())

np.random.shuffle(dti._data._data)
assert not dti.equals(dti2)

cd1 = pd.CategoricalDtype(dti)
cd2 = pd.CategoricalDtype(dti2)
cd3 = pd.CategoricalDtype(dti2[:-1])
cd4 = pd.CategoricalDtype(pd.Index(range(len(dti))))

In [5]: %timeit cd1 == cd2 
548 µs ± 3.94 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)  # <-- master
239 µs ± 1.04 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)  # <-- PR

In [6]: %timeit cd1 == cd3
543 µs ± 4.05 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)   # <-- master
5.05 µs ± 257 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) # <-- PR

In [7]: %timeit cd1 == cd4
389 µs ± 13.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)  # <-- master
2.17 µs ± 63.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)  # <-- PR

```