String dtype: implement _get_common_dtype
This PR implements `StringDtype._get_common_dtype` to control the behaviour in concat etc.

This fixes two things:
- When concatting with a numpy string-like dtype (S/U), we can preserve our StringDtype instead of converting to object dtype (as happens now). In general we don't store such numpy dtypes in pandas objects, but in certain corner cases we are passing numpy dtypes directly to `find_common_type`.
- When concatting different instances of StringDtype. In practice this shouldn't happen often, but can certainly occur. In this case, I decided to give precedence to the pyarrow / pd.NA: 1) if pyarrow is installed, that's the default and therefore logical pick in this case as well, and 2) pd.NA is opt in, so if you have a mix, assume the user explicitly opted in and propagate that preference.

xref https://github.com/pandas-dev/pandas/issues/54792




Thanks @jorisvandenbossche 