Add a version of `GenericUnivariateSelect`/`SelectPercentile`/`SelectKBest` that allows input of X with missing values and `y=None`.

### Describe the workflow you want to enable

- Select features by the percentage of missing values of X
- Select features only by statistical properties of X before y is available

### Describe your proposed solution

Create a version with weaker X, y checks.

### Describe alternatives you've considered, if relevant

1.
```python
class LooseGenericUnivariateSelect(GenericUnivariateSelect):
    def fit(self, X: Any, y: Any = None) -> Self:
        y = np.ones(X.shape[0])
        return super().fit(X, y)
    
    def _validate_data(self, X, y=None, *args, **kwargs):
        kwargs["force_all_finite"] = False
        kwargs.pop("multi_output", None)
        return super()._validate_data(X, y, *args, **kwargs)
    
    def _more_tags(self):
        return {"requires_y": False, "allow_nan": True}
```
Not sure if this code works properly.
2.
Bother to create an estimator that outputs the desired function in `feature_importance_` and use `SelectFromModel`

### Additional context

_No response_

COMMENT:
> This does not address the problem. Please read my statement again.

A code snippet would be better. Specifically, we overlooked that we validate `y` and `None` cannot be pass there. I assume that we could make `y` to be optional at `fit` and only validate if provided.

<details>

```python
import numpy as np
from sklearn.feature_selection import GenericUnivariateSelect
X = np.random.randn(100, 10)

def func(X, y=None):
    return np.ones(X.shape[1])

transformer = GenericUnivariateSelect(func, mode='k_best')
X_new = transformer.fit(X, y=None)
```

```pytb
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[2], line 9
      6     return np.ones(X.shape[1])
      8 transformer = GenericUnivariateSelect(func, mode='k_best')
----> 9 X_new = transformer.fit(X, y=None)

File ~/Documents/packages/scikit-learn/sklearn/base.py:1215, in _fit_context.<locals>.decorator.<locals>.wrapper(estimator, *args, **kwargs)
   1208     estimator._validate_params()
   1210 with config_context(
   1211     skip_parameter_validation=(
   1212         prefer_skip_nested_validation or global_skip_validation
   1213     )
   1214 ):
-> 1215     return fit_method(estimator, *args, **kwargs)

File ~/Documents/packages/scikit-learn/sklearn/feature_selection/_univariate_selection.py:501, in _BaseFilter.fit(self, X, y)
    483 @_fit_context(prefer_skip_nested_validation=True)
    484 def fit(self, X, y):
    485     """Run score function on (X, y) and get the appropriate features.
    486 
    487     Parameters
   (...)
    499         Returns the instance itself.
    500     """
--> 501     X, y = self._validate_data(
    502         X, y, accept_sparse=["csr", "csc"], multi_output=True
    503     )
    505     self._check_params(X, y)
    506     score_func_ret = self.score_func(X, y)

File ~/Documents/packages/scikit-learn/sklearn/base.py:583, in BaseEstimator._validate_data(self, X, y, reset, validate_separately, cast_to_ndarray, **check_params)
    580 self._check_feature_names(X, reset=reset)
    582 if y is None and self._get_tags()["requires_y"]:
--> 583     raise ValueError(
    584         f"This {self.__class__.__name__} estimator "
    585         "requires y to be passed, but the target y is None."
    586     )
    588 no_val_X = isinstance(X, str) and X == "no_validation"
    589 no_val_y = y is None or isinstance(y, str) and y == "no_validation"

ValueError: This GenericUnivariateSelect estimator requires y to be passed, but the target y is None.
```

</details>

Labels: New Feature