Handle new `pd.StringDtype` that is coming in pandas 3

This issue is the result of investigating https://github.com/scikit-learn/scikit-learn/issues/31778

The failures in the nightlies are due to changes coming in pandas 3.0. In particular the switch to using `StringDtype` as the type for string columns. The old behaviour was to use `object`.

This has a few effects:
- can no longer use `np.issubdtype` because the new dtype isn't one known to numpy
- selecting columns in `ColumnTransformer` doesn't select the right columns anymore

These are the failing tests:
```
FAILED compose/tests/test_column_transformer.py::test_make_column_transformer_pandas - TypeError: Cannot interpret '<StringDtype(storage='python', na_value=nan)>'...
FAILED compose/tests/test_column_transformer.py::test_column_transformer_remainder_pandas[pd-index-expected_cols4] - TypeError: Cannot interpret '<StringDtype(storage='python', na_value=nan)>'...
FAILED compose/tests/test_column_transformer.py::test_make_column_selector_with_select_dtypes[cols1-None-None-object] - AssertionError: 
FAILED compose/tests/test_column_transformer.py::test_make_column_selector_with_select_dtypes[cols3-None-include3-None] - AssertionError: 
FAILED compose/tests/test_column_transformer.py::test_make_column_selector_with_select_dtypes[cols4-None-object-None] - AssertionError: 
FAILED compose/tests/test_column_transformer.py::test_make_column_selector_with_select_dtypes[cols12-None-include12-None] - AssertionError: 
FAILED compose/tests/test_column_transformer.py::test_column_transformer_with_make_column_selector - AssertionError: 
FAILED preprocessing/tests/test_encoders.py::test_encoder_dtypes_pandas - assert False
FAILED preprocessing/tests/test_function_transformer.py::test_function_transformer_with_dataframe_and_check_inverse_True - TypeError: Cannot interpret '<StringDtype(storage='python', na_value=nan)>'...
```

Three of these (first one and last two) are due to using `issubdtype`. The other failures are due to not selecting the right columns (n.b. the way the test is written the "desired" and "actual" are swapped in the error message, I think)


## Potential Fixes

Code that works both with old and new versions of pandas. One PR to address the `issubdtype` problem and one to address column selector logic.

Instances where we use `issubdtype` probably need to gain a special handling for the possibility of the new dtype.

For the `ColumnSelector` test failures we need to investigate how much of this is due to how the tests are written and how much due to real changes. For example, it could be that updating the tests to be "written for the new string dtype" means they will pass. This means the problem is using a mix of old and new. The fix for this is different to having to write column selector code that works with both.

## Notes

General notes on transitioning to the new string dtype https://pandas.pydata.org/docs/dev/user_guide/migration-3-strings.html

An example of the column selector code that needs updating:
```python
import numpy as np
import pandas as pd  # pandas 2.3 works for seeing this

# Old behaviour
X_df = pd.DataFrame(
            {
                "col_int": np.array([0, 1, 2], dtype=int),
                "col_float": np.array([0.0, 1.0, 2.0], dtype=float),
                "col_str": ["one", "two", "three"],
            },
            columns=["col_int", "col_float", "col_str"],
        )

X_df.select_dtypes(include=[np.number, object])
#    col_int  col_float col_str
#0        0        0.0     one
#1        1        1.0     two
#2        2        2.0   three

#####
# New behaviour
pd.options.future.infer_string = True

X_df = pd.DataFrame(
            {
                "col_int": np.array([0, 1, 2], dtype=int),
                "col_float": np.array([0.0, 1.0, 2.0], dtype=float),
                "col_str": ["one", "two", "three"],
            },
            columns=["col_int", "col_float", "col_str"],
        )

# Selects one fewer column
X_df.select_dtypes(include=[np.number, object])
#   col_int  col_float
#0        0        0.0
#1        1        1.0
#2        2        2.0
```

COMMENT:
There is also the WIP PR by @jorisvandenbossche https://github.com/scikit-learn/scikit-learn/pull/31807

Labels: Enhancement, Moderate, module:compose, module:preprocessing, Pandas compatibility