groups parameter in cross_validate not passed to inner model

### Describe the bug

I discovered that I am unable to perform nested cross validation using ``cross_validate`` and similar methods in ``_validation.py`` because the ``groups`` parameter is not passed inwards to the ``_fit_and_score`` function. This becomes troublesome when trying to achieve an unbiased estimate of an optimal model found via hyperparameter search, when the cross validation splitters need ``groups`` to work (e.g. ``StratifiedGroupKFold``). Minimal working example provided below

### Steps/Code to Reproduce

```
# minimal example of nested stratified groupkfold failing
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV, cross_validate, StratifiedGroupKFold

X = np.random.randn(100, 10)
y = np.random.randint(0, 2, size=100)
groups = np.random.randint(0, 10, size=100)
outer_cv = StratifiedGroupKFold(n_splits=5)
inner_cv = StratifiedGroupKFold(n_splits=5)
model = RandomForestClassifier()
grid = {'n_estimators': [10, 100, 1000], 'max_depth': [None, 10, 100]}
search = GridSearchCV(model, grid, cv=inner_cv, n_jobs=1)
outer_eval = cross_validate(search, X, y=y, groups=groups, cv=outer_cv, n_jobs=1, verbose=10, return_train_score=True, return_estimator=True, error_score='raise')
print(outer_eval)
```

### Expected Results

The dictionary output of ``cross_validate``

### Actual Results

```
/home/roy/anaconda3/envs/mcDestroyer/lib/python3.11/site-packages/sklearn/model_selection/_validation.py:821: UserWarning: Scoring failed. The score on this train-test partition for these parameters will be set to nan. Details: 
Traceback (most recent call last):
  File "/home/roy/anaconda3/envs/mcDestroyer/lib/python3.11/site-packages/sklearn/model_selection/_validation.py", line 810, in _score
    scores = scorer(estimator, X_test, y_test)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/roy/anaconda3/envs/mcDestroyer/lib/python3.11/site-packages/sklearn/metrics/_scorer.py", line 527, in __call__
    return estimator.score(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/roy/anaconda3/envs/mcDestroyer/lib/python3.11/site-packages/sklearn/base.py", line 706, in score
    return accuracy_score(y, self.predict(X), sample_weight=sample_weight)
                             ^^^^^^^^^^^^^^^
  File "/home/roy/anaconda3/envs/mcDestroyer/lib/python3.11/site-packages/sklearn/ensemble/_forest.py", line 823, in predict
    proba = self.predict_proba(X)
            ^^^^^^^^^^^^^^^^^^^^^
  File "/home/roy/anaconda3/envs/mcDestroyer/lib/python3.11/site-packages/sklearn/ensemble/_forest.py", line 865, in predict_proba
    X = self._validate_X_predict(X)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/roy/anaconda3/envs/mcDestroyer/lib/python3.11/site-packages/sklearn/ensemble/_forest.py", line 599, in _validate_X_predict
    X = self._validate_data(X, dtype=DTYPE, accept_sparse="csr", reset=False)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/roy/anaconda3/envs/mcDestroyer/lib/python3.11/site-packages/sklearn/base.py", line 605, in _validate_data
    out = check_array(X, input_name="X", **check_params)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/roy/anaconda3/envs/mcDestroyer/lib/python3.11/site-packages/sklearn/utils/validation.py", line 967, in check_array
    raise ValueError(
ValueError: Found array with 0 sample(s) (shape=(0, 10)) while a minimum of 1 is required by RandomForestClassifier.
```

### Versions

```shell
1.3.2
```

COMMENT:
Yes, all tools in this issue already support metadata routing. This works:

```py
import numpy as np
import sklearn
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV, cross_validate, StratifiedGroupKFold

sklearn.set_config(enable_metadata_routing=True)
X = np.random.randn(100, 10)
y = np.random.randint(0, 2, size=100)
groups = np.random.randint(0, 10, size=100)
outer_cv = StratifiedGroupKFold(n_splits=5)
inner_cv = StratifiedGroupKFold(n_splits=5)
model = RandomForestClassifier()
grid = {"n_estimators": [10, 100], "max_depth": [None, 10]}
search = GridSearchCV(model, grid, cv=inner_cv, n_jobs=1)
outer_eval = cross_validate(
    search,
    X,
    y=y,
    cv=outer_cv,
    n_jobs=-1,
    verbose=10,
    return_train_score=True,
    return_estimator=True,
    error_score="raise",
    params={"groups": groups}
)
print(outer_eval)
```

Labels: Bug, Metadata Routing