DataFrame.convert_dtypes doesn't preserve subclasses
- [x] closes #43668 
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit) for how to run them
- [x] whatsnew entry

I've added a fixture for the specific construction of a subclassed dataframe from the issue - which mirrors the setup in geopandas, I expect this probably needs to be relocated (I could have constructed this inline with the test and maybe that's the right solution, but I can see analogous changes for `astype` perhaps being useful in the geopandas context as well). 

I've also added the call to `__finalize__` although it's not strictly needed, since that's also needed by #28283 (Note that the 1 dimensional case already has `__finalize__` called indirectly via `astype`.

CI failures now don't seem related, but I could be wrong

Edit: now it definitely does, trying to sort out the type hints > looks ok, need to remove the print. ping on green.

@jreback looks like everything is passing now. thanks @m-richards 