[ArrowStringDtype] Make it already a StringDtype subclass
@simonjayhawkins this will be redundant after https://github.com/pandas-dev/pandas/pull/39908, but in the meantime, ArrowStringDtype being a subclass would help for writing robust code related to `StringDtype` in downstream packages (for those testing against pandas master)
Thanks @jorisvandenbossche lgtm

we could clean-up the various `isinstance(..., StringDtype)` -> `isinstance(..., (StringDtype, ArrowStringDtype))` checks. do that here or as a follow-up? > we could clean-up the various `isinstance(..., StringDtype)` -> `isinstance(..., (StringDtype, ArrowStringDtype))` checks. do that here or as a follow-up?

Did that here ```
pandas/core/arrays/string_arrow.py:113: error: Return type "Type[ArrowStringArray]" of "construct_array_type" incompatible with return type "Type[StringArray]" in supertype "StringDtype"  [override]
pandas/core/arrays/string_arrow.py:129: error: Return type "ArrowStringArray" of "__from_arrow__" incompatible with return type "StringArray" in supertype "StringDtype"  [override]
``` @simonjayhawkins is there an easy solution for that? (sorry, currently don't have time to dive into this, otherwise will add some ignores) in #39908 we add ArrowStringArray to the return types and import it in a TYPE_CHECKING block Would you be fine with ignoring it for now, and then properly fixing it in #39908 ? 
I could copy the approach from #39908, but that also seems a bit strange to do right now since the StringDtype itself doesn't yet return `ArrowStringArray`. sure