Metadata Routing breaks ColumnTransformer

### Describe the bug

When enable_metadata_routing is set to True, fitting a ColumnTransformer gets AttributeError: 'ColumnTransformer' object has no attribute '_columns'.

### Steps/Code to Reproduce

```python
from numpy.random import default_rng
import pandas as pd
import sklearn
from sklearn.compose import ColumnTransformer
from sklearn.compose import make_column_selector as column_selector
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import RobustScaler
from sklearn.linear_model import LogisticRegressionCV

sklearn.set_config(enable_metadata_routing = True)

preprocess = ColumnTransformer([
	("normalizer", RobustScaler(), column_selector(dtype_include = 'number'))
])

estimator = LogisticRegressionCV()

pipeline = Pipeline([
	("preprocess", preprocess),
	("estimator", estimator)
])

rng = default_rng(0)
X = pd.DataFrame(rng.standard_normal(300).reshape(-1, 3), columns = ["A", "B", "C"])
y = rng.standard_normal(100) > 0
pipeline.fit(X, y)
```

### Expected Results

No error is thrown

### Actual Results

```pytb
Traceback (most recent call last):
  File "/home/luis/fail.py", line 27, in <module>
    pipeline.fit(X, y)
  File "/home/luis/.python/lib/python3.11/site-packages/sklearn/base.py", line 1351, in wrapper
    return fit_method(estimator, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/luis/.python/lib/python3.11/site-packages/sklearn/pipeline.py", line 470, in fit
    routed_params = self._check_method_params(method="fit", props=params)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/luis/.python/lib/python3.11/site-packages/sklearn/pipeline.py", line 356, in _check_method_params
    routed_params = process_routing(self, method, **props, **kwargs)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/luis/.python/lib/python3.11/site-packages/sklearn/utils/_metadata_requests.py", line 1555, in process_routing
    request_routing = get_routing_for_object(_obj)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/luis/.python/lib/python3.11/site-packages/sklearn/utils/_metadata_requests.py", line 1132, in get_routing_for_object
    return deepcopy(obj.get_metadata_routing())
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/luis/.python/lib/python3.11/site-packages/sklearn/pipeline.py", line 1159, in get_metadata_routing
    router.add(method_mapping=method_mapping, **{name: trans})
  File "/home/luis/.python/lib/python3.11/site-packages/sklearn/utils/_metadata_requests.py", line 862, in add
    mapping=method_mapping, router=get_routing_for_object(obj)
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/luis/.python/lib/python3.11/site-packages/sklearn/utils/_metadata_requests.py", line 1132, in get_routing_for_object
    return deepcopy(obj.get_metadata_routing())
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/luis/.python/lib/python3.11/site-packages/sklearn/compose/_column_transformer.py", line 1153, in get_metadata_routing
    for name, step, _, _ in self._iter(
  File "/home/luis/.python/lib/python3.11/site-packages/sklearn/compose/_column_transformer.py", line 426, in _iter
    for (name, trans, _), column in zip(self.transformers, self._columns)
                                                           ^^^^^^^^^^^^^
AttributeError: 'ColumnTransformer' object has no attribute '_columns'
```

### Versions

```shell
System:
    python: 3.11.6 (main, Nov 14 2023, 09:36:21) [GCC 13.2.1 20230801]
executable: /home/luis/.python/bin/python
   machine: Linux-6.7.0-arch3-1-x86_64-with-glibc2.38

Python dependencies:
      sklearn: 1.4.0
          pip: 23.3.2
   setuptools: 65.5.0
        numpy: 1.26.3
        scipy: 1.11.4
       Cython: None
       pandas: 2.1.4
   matplotlib: None
       joblib: 1.3.2
threadpoolctl: 3.2.0

Built with OpenMP: True

threadpoolctl info:
       user_api: openmp
   internal_api: openmp
    num_threads: 20
         prefix: libgomp
       filepath: /home/luis/.python/lib/python3.11/site-packages/scikit_learn.libs/libgomp-a34b3233.so.1.0.0
        version: None

       user_api: blas
   internal_api: openblas
    num_threads: 20
         prefix: libopenblas
       filepath: /home/luis/.python/lib/python3.11/site-packages/numpy.libs/libopenblas64_p-r0-0cf96a72.3.23.dev.so
        version: 0.3.23.dev
threading_layer: pthreads
   architecture: Haswell

       user_api: blas
   internal_api: openblas
    num_threads: 20
         prefix: libopenblas
       filepath: /home/luis/.python/lib/python3.11/site-packages/scipy.libs/libopenblasp-r0-23e5df77.3.21.dev.so
        version: 0.3.21.dev
threading_layer: pthreads
   architecture: Haswell
```

COMMENT:
Thanks for the report @luiscastro193 , I'll open a fix and include it in the next patch release.

Labels: Bug