Multioutput regressors raise ValueError when scoring with `multioutput="raw_values"`

### Describe the bug

The goal of the `multioutput="raw_values"` parameter in the regression metrics is to be able to inspect the individual scores of a multioutput metaestimator, but the `_score` function in `_validation.py` expects a number, not the array it actually outputs.

We should add an exception to take into account this scenario.

### Steps/Code to Reproduce

```python
from sklearn.datasets import make_regression
from sklearn.ensemble import HistGradientBoostingRegressor
from sklearn.metrics import make_scorer, mean_absolute_error
from sklearn.model_selection import cross_validate
from sklearn.multioutput import MultiOutputRegressor

X, Y = make_regression(n_features=10, n_targets=2, random_state=0)
hist_gbdt = HistGradientBoostingRegressor(random_state=0)
model = MultiOutputRegressor(hist_gbdt) # RegressorChain fails as well
scoring = {"MO_MAE": make_scorer(mean_absolute_error, multioutput="raw_values")}

cv_results = cross_validate(model, X, Y, scoring=scoring)
cv_results["test_MO_MAE"]
```

### Expected Results

Array of shape (`n_outputs`, `n_splits`), in this case shape (2, 5) as using the default KFold cross-validation.

### Actual Results

```python-traceback
File ~/miniforge3/envs/joblib-benchmark/lib/python3.9/site-packages/sklearn/model_selection/_validation.py:708, in _fit_and_score(estimator, X, y, scorer, train, test, verbose, parameters, fit_params, return_train_score, return_parameters, return_n_test_samples, return_times, return_estimator, split_progress, candidate_progress, error_score)
    705 result["fit_error"] = None
    707 fit_time = time.time() - start_time
--> 708 test_scores = _score(estimator, X_test, y_test, scorer, error_score)
    709 score_time = time.time() - start_time - fit_time
    710 if return_train_score:

File ~/miniforge3/envs/joblib-benchmark/lib/python3.9/site-packages/sklearn/model_selection/_validation.py:809, in _score(estimator, X_test, y_test, scorer, error_score)
    807                 score = score.item()
    808         if not isinstance(score, numbers.Number):
--> 809             raise ValueError(error_msg % (score, type(score), name))
    810         scores[name] = score
    811 else:  # scalar

ValueError: scoring must return a number, got [110.4080722   83.27384784] (<class 'numpy.ndarray'>) instead. (scorer=MO_MAE)
```

### Versions

```shell
System:
    python: 3.9.16 | packaged by conda-forge | (main, Feb  1 2023, 21:39:03)  [GCC 11.3.0]
executable: /home/arturoamor/miniforge3/envs/joblib-benchmark/bin/python3.9
   machine: Linux-5.14.0-1057-oem-x86_64-with-glibc2.31

Python dependencies:
      sklearn: 1.2.1
          pip: 23.0.1
   setuptools: 67.3.2
        numpy: 1.24.2
        scipy: 1.10.1
       Cython: None
       pandas: 1.5.3
   matplotlib: 3.7.0
       joblib: 1.2.0
threadpoolctl: 3.1.0

Built with OpenMP: True

threadpoolctl info:
       user_api: openmp
   internal_api: openmp
         prefix: libgomp
       filepath: /home/arturoamor/miniforge3/envs/joblib-benchmark/lib/python3.9/site-packages/scikit_learn.libs/libgomp-a34b3233.so.1.0.0
        version: None
    num_threads: 8

       user_api: blas
   internal_api: openblas
         prefix: libopenblas
       filepath: /home/arturoamor/miniforge3/envs/joblib-benchmark/lib/python3.9/site-packages/numpy.libs/libopenblas64_p-r0-15028c96.3.21.so
        version: 0.3.21
threading_layer: pthreads
   architecture: SkylakeX
    num_threads: 8

       user_api: blas
   internal_api: openblas
         prefix: libopenblas
       filepath: /home/arturoamor/miniforge3/envs/joblib-benchmark/lib/python3.9/site-packages/scipy.libs/libopenblasp-r0-41284840.3.18.so
        version: 0.3.18
threading_layer: pthreads
   architecture: SkylakeX
    num_threads: 8
```

COMMENT:
Just looping over the issue. A `_score` function is used in common between `cross_validate` and certainly the `SerchCV` estimator. The `SearchCV` estimator requires a single number to select the best parameter and therefore a multioutput scores cannot be used (this is the reason for the average).

However, this constraint should not exist for `cross_validate` that is only a report. Reporting a score per metric is a valid use-case. We should therefore dissociate the check required by the `SearchCV` from the `cross_validate`. I assume it means that we have to extract the piece of code from `_score` and move it into the `SearchCV` common class.

Labels: Bug, module:multioutput