TunedThresholdClassifierCV: add other metrics

### Describe the workflow you want to enable

I figured that I might use the new tuned thresholder to turn code like this into something that's a bit more like gridsearch with all the parallism benefits.

```python
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score
from sklearn.model_selection import FixedThresholdClassifier, train_test_split
from tqdm import trange


X, y = make_classification(
    n_samples=10_000, weights=[0.9, 0.1], class_sep=0.8, random_state=42
)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, stratify=y, random_state=42
)

classifier = LogisticRegression(random_state=0).fit(X_train, y_train)

n_steps = 200
metrics = []
for i in trange(1, n_steps):
    classifier_other_threshold = FixedThresholdClassifier(
        classifier, threshold=i/n_steps, response_method="predict_proba"
    ).fit(X_train, y_train)
    
    y_pred = classifier_other_threshold.predict(X_train)
    metrics.append({
        'threshold': i/n_steps,
        'f1': f1_score(y_train, y_pred),
        'precision': precision_score(y_train, y_pred),
        'recall': recall_score(y_train, y_pred),
        'accuracy': accuracy_score(y_train, y_pred)
    })
```

This data can give me a very pretty plot with a lot of information.

![CleanShot 2024-05-21 at 10 18 42](https://github.com/scikit-learn/scikit-learn/assets/1019791/6d983d17-bfbf-43b1-8d56-3cf469123dd6)

But I think I can't make this chart with the new tuned thresholder in the 1.5 release candidate. 

I can do this:

```python
from sklearn.model_selection import TunedThresholdClassifierCV
from sklearn.metrics import make_scorer

classifier_other_threshold = TunedThresholdClassifierCV(
    classifier,  
    scoring=make_scorer(f1_score), 
    response_method="predict_proba", 
    thresholds=200, 
    n_jobs=-1, 
    store_cv_results=True
)
classifier_other_threshold.fit(X_train, y_train)
```

And this gives me data for a pretty plot as well, but it only contains the f1 score. There is no way to add extra metrics in the current implementation.
 

![CleanShot 2024-05-21 at 10 20 49](https://github.com/scikit-learn/scikit-learn/assets/1019791/a8970386-0224-4266-a3a3-1079107def99)



### Describe your proposed solution

Maybe it makes sense to also allow a `metrics` input to the tuned cv estimator. That way, it can still collect any extra metrics that we might be interested in.

### Describe alternatives you've considered, if relevant

The aforementioned code shows the chart that I am mainly interested in. A single metric never tells me the full story and the extra metrics help prevent me overfit on a single variable. Reality tends to be more complex than what a single metric can provide, so I like to nudge extra context with some (custom) metrics. 

### Additional context

_No response_

COMMENT:
> What I want is the ability to add metrics, some of which are custom, that can help ensure that optimizing for one thing, say f1 score, does not cause issues else where, say a fairness metric. I am totally fine with optimizing a single metric, that totally makes sense! But I would prefer to also be able to report on other metrics while doing so.

But once you have the model, this is just an evaluation issue. So by providing a function `sklearn.metrics.decision_threshold_curve` that take any callable (maybe even a list of callable) should allow for custom and already defined metric.

However, this require an additional line of code because it is not called within the `TunedThresholdClassifierCV` but afterwards:

```python
model = TunedThresholdClassifierCV(.., scoring=business_metrics, ...).fit(X_train, y_train)
metrics_log = decision_threshold_curve(
    y_test, model.predict_proba(X_test), scoring=[business_metrics, f1_score, ...]
)
```

The advantage here is that you can compute the score on a provided dataset and not only an internal validation set. So you will be able to compare train/test or run it through cross-validation.

Labels: New Feature, Needs Triage