GroupShuffleSplit chokes on pd.Int16Dtype() with a cryptic error

### Describe the bug

`GroupShuffleSplit` chokes on `pd.Int16Dtype()` with a cryptic error.
It looks like internally the data series gets converted to a list, and list comparison returns a scalar, while an iterable is expected

### Steps/Code to Reproduce

```python
data = pd.DataFrame({"clusters": [1, 2, 3, pd.NA, pd.NA],
                    "x" : [0,1,2,3,4]} )

splitter = GroupShuffleSplit(test_size=.2, n_splits=2, random_state = 7)
split = splitter.split(data, groups=data['clusters'])
train_inds, test_inds = next(split)
```

### Expected Results

e.g. `[0,1,3]` and `[2,4]`

### Actual Results

```
AttributeError                            Traceback (most recent call last)
Input In [23], in <cell line: 3>()
      1 splitter = GroupShuffleSplit(test_size=.2, n_splits=2, random_state = 7)
      2 split = splitter.split(data, groups=data['clusters'])
----> 3 train_inds, test_inds = next(split)

File /opt/conda/lib/python3.8/site-packages/sklearn/model_selection/_split.py:1600, in BaseShuffleSplit.split(self, X, y, groups)
   1570 """Generate indices to split data into training and test set.
   1571 
   1572 Parameters
   (...)
   1597 to an integer.
   1598 """
   1599 X, y, groups = indexable(X, y, groups)
-> 1600 for train, test in self._iter_indices(X, y, groups):
   1601     yield train, test

File /opt/conda/lib/python3.8/site-packages/sklearn/model_selection/_split.py:1805, in GroupShuffleSplit._iter_indices(self, X, y, groups)
   1803 if groups is None:
   1804     raise ValueError("The 'groups' parameter should not be None.")
-> 1805 groups = check_array(groups, ensure_2d=False, dtype=None)
   1806 classes, group_indices = np.unique(groups, return_inverse=True)
   1807 for group_train, group_test in super()._iter_indices(X=classes):
   1808     # these are the indices of classes in the partition
   1809     # invert them into data indices

File /opt/conda/lib/python3.8/site-packages/sklearn/utils/validation.py:805, in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator)
    799         raise ValueError(
    800             "Found array with dim %d. %s expected <= 2."
    801             % (array.ndim, estimator_name)
    802         )
    804     if force_all_finite:
--> 805         _assert_all_finite(array, allow_nan=force_all_finite == "allow-nan")
    807 if ensure_min_samples > 0:
    808     n_samples = _num_samples(array)

File /opt/conda/lib/python3.8/site-packages/sklearn/utils/validation.py:126, in _assert_all_finite(X, allow_nan, msg_dtype)
    122     raise ValueError("Input contains NaN")

AttributeError: 'bool' object has no attribute 'any'
```

### Versions

```shell
System:
    python: 3.8.8 (default, Apr 13 2021, 19:58:26)  [GCC 7.3.0]
executable: /opt/conda/bin/python
   machine: Linux-5.4.162-86.275.amzn2.x86_64-x86_64-with-glibc2.10

Python dependencies:
          pip: 22.1.2
   setuptools: 59.5.0
      sklearn: 1.0.2
        numpy: 1.22.3
        scipy: 1.6.3
       Cython: 0.29.23
       pandas: 1.2.4
   matplotlib: 3.4.2
       joblib: 1.0.1
threadpoolctl: 2.1.0

Built with OpenMP: True
```

COMMENT:
Scikit-learn does not support `nans` are group labels. For example, if we use `np.nan`:

```python
from sklearn.model_selection import GroupShuffleSplit
import numpy as np
import pandas as pd
data = pd.DataFrame({"clusters": [1, 2, 3, np.nan, np.nan],
                    "x" : [0,1,2,3,4]} )

splitter = GroupShuffleSplit(test_size=.2, n_splits=2, random_state = 7)
split = splitter.split(data, groups=data['clusters'])
train_inds, test_inds = next(split)

# ValueError: Input groups contains NaN.
```

I do agree that the error message for `pd.NA` is bad and should be improved.

Labels: Bug, module:model_selection