[ArrowStringArray] API: StringDtype parameterized by storage (python or pyarrow)
continuation of #36142

todo:

- [x] during the merge I removed the import gymnastics from `pandas/core/arrays/string_arrow.py`. We added since `ArrowStringDtype` should always be available. I think this is no longer the case and we want to move the import checks to `StringDtype`. I expect envs without pyarrow to fail for now.
- [x] `test_arrow_roundtrip` is failing. `StringDtype.__from_arrow__` needs updating.
- [x] address @jorisvandenbossche comments https://github.com/pandas-dev/pandas/pull/36142#discussion_r484213504 and https://github.com/pandas-dev/pandas/pull/36142#discussion_r484213103
- [x] some other test failures `AssertionError: assert 'unknown-array' == 'string'`