Bug Ensure cache_readonly is only applied on instance
The property cache was using the attribute `_cache` which occasionally is used by other classes as a class attribute. Most prominently this is true for all subclasses of `PandasExtensionDtype`, see https://github.com/pandas-dev/pandas/blob/ce082fb04a0cf597f673d35bc47afd6c2e3c3168/pandas/core/dtypes/dtypes.py#L89

This would cause the same cash to be used for the property caching as for the extension dtype. The dtype cache is a class attribute whereas the property cache is supposed to be instance only. I fixed this by using a longer name for the property caching attribute, hoping this would lead to less collisions.

Introducing a new attribute leads to failures for Cython extension types which previously were handled with an `AttributeError`. Firstly, I believe these cases should not silently pass and secondly the previous behaviour was wrong by not executing the function w/out cache but it returned the instance of the `CachedProperty` class instead. I addressed this but enabling the caching for extension classes requires defining the attribute explicitly. I went ahead and created a mixin class for this but I'm open to other suggestions as well.


- [x] closes N/A
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them
- [x] whatsnew entry
