COMPAT: extension dtypes (DatetimeTZ, Categorical) are now Singleton cached objects
allows for proper is / == comparisons
Had this odd semantic difference as these were really different objects (though they DID hash the same)
This doesn't actually affect any user code.

```
In [1]: from pandas.core import common as com

In [2]: t1 = com.DatetimeTZDtype('datetime64[ns, US/Eastern]')

In [3]: t2 = com.DatetimeTZDtype('datetime64[ns, US/Eastern]')

In [4]: t1 == t2
Out[4]: True

In [5]: t1 is t2
Out[5]: False

In [6]: hash(t1)
Out[6]: 5756291921003024619

In [7]: hash(t2)
Out[7]: 5756291921003024619
```

## [Current coverage](https://codecov.io/gh/pydata/pandas/pull/13285?src=pr) is **84.20%**

> Merging [#13285](https://codecov.io/gh/pydata/pandas/pull/13285?src=pr) into [master](https://codecov.io/gh/pydata/pandas/branch/master?src=pr) will increase coverage by **<.01%**

``` diff
@@             master     #13285   diff @@
==========================================
  Files           138        138          
  Lines         50591      50607    +16   
  Methods           0          0          
  Messages          0          0          
  Branches          0          0          
==========================================
+ Hits          42592      42613    +21   
+ Misses         7999       7994     -5   
  Partials          0          0          
```

> Powered by [Codecov](https://codecov.io?src=pr). Last updated by [8749273...fd09c61](https://codecov.io/gh/pydata/pandas/compare/87492737f2f81183700849d453c38d507f128811...fd09c61439ecc8f4e36cfa1c0d7e5f09253f9c2c)
