REF/API: DatetimeTZDtype
A cleanup of DatetimeTZDtype

* Remove magic constructor from string. It seemed dangerous to overload `unit` with either `unit` or a full `datetime64[ns, tz]` string. This required changing `DatetimeTZDtype.construct_from_string` and changing a number of places to use `construct_from_string` rather than the main `__new__`
* Change `__new__` to `__init__` and remove caching. It seemed to be causing more problems that it was worth. You could too easily create nonsense DatetimeTZDtypes like
```
In [3]: t = pd.core.dtypes.dtypes.DatetimeTZDtype(unit=None, tz=None)
```
* Change `.tz` and `.unit` to properties instead of attributes. I've not provided setters. We could in theory, since we're getting rid of caching, but I'd rather wait till there's a demand..

The remaining changes in the DatetimeArray PR will be to

1. Inherit from ExtensionDtype
2. Implement construct_array_type
3. Register the dtype