### Apache Airflow version

2.2.2 (latest released)

### Operating System

Darwin Kernel Version 21.1.0 RELEASE_ARM64_T8101 arm64

### Versions of Apache Airflow Providers

_No response_

### Deployment

Virtualenv installation

### Deployment details

python_version  | 3.9.7 (default, Sep 16 2021, 23:53:23)  [Clang 12.0.0 ]

### What happened

The following error is displayed in Web UI:
```
Broken DAG: [<EDITED>/scripts/airflow/dags/master/sample_dag/sample_dag.py] Traceback (most recent call last):
  File "<EDITED>/miniconda3/envs/dev-airflow/lib/python3.9/site-packages/airflow/serialization/serialized_objects.py", line 271, in serialize_to_json
    serialized_object[key] = _encode_timetable(value)
  File "<EDITED>/miniconda3/envs/dev-airflow/lib/python3.9/site-packages/airflow/serialization/serialized_objects.py", line 152, in _encode_timetable
    raise _TimetableNotRegistered(importable_string)
airflow.serialization.serialized_objects._TimetableNotRegistered: Timetable class 'workday.AfterWorkdayTimetable' is not registered

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<EDITED>/miniconda3/envs/dev-airflow/lib/python3.9/site-packages/airflow/serialization/serialized_objects.py", line 937, in to_dict
    json_dict = {"__version": cls.SERIALIZER_VERSION, "dag": cls.serialize_dag(var)}
  File "<EDITED>/miniconda3/envs/dev-airflow/lib/python3.9/site-packages/airflow/serialization/serialized_objects.py", line 849, in serialize_dag
    raise SerializationError(f'Failed to serialize DAG {dag.dag_id!r}: {e}')
airflow.exceptions.SerializationError: Failed to serialize DAG 'learning_example_workday_timetable': Timetable class 'workday.AfterWorkdayTimetable' is not registered
```

### What you expected to happen

For the custom timetable to be implemented and used by DAG.

### How to reproduce

Following instructions from [Custom DAG Scheduling with Timetables](https://airflow.apache.org/docs/apache-airflow/stable/howto/timetable.html) with following new DAG to implement:

```python
import datetime

from airflow import DAG
from airflow import plugins_manager
from airflow.operators.dummy import DummyOperator

from workday import AfterWorkdayTimetable

with DAG(
    dag_id="learning_example_workday_timetable",
    start_date=datetime.datetime(2021,11,20),
    timetable=AfterWorkdayTimetable(),
    tags=["example","learning","timetable"],
) as dag:
    DummyOperator(task_id="run_this")
```

### Anything else

I have tried digging through the code and believe the issue is in this line:
https://github.com/apache/airflow/blob/fb478c00cdc5e78d5e85fe5ac103707c829be2fb/airflow/serialization/serialized_objects.py#L149

Perhaps the [Custom DAG Scheduling with Timetables](https://airflow.apache.org/docs/apache-airflow/stable/howto/timetable.html) expects an `__eq__` implemented in the `AfterWorkdayTimetable` class but it would appear that the `AfterWorkdayTimetable` class imported through the DAG and the `AfterWorkdayTimetable` class imported through `plugin_manager` have different `id()`'s:
https://github.com/apache/airflow/blob/fb478c00cdc5e78d5e85fe5ac103707c829be2fb/airflow/serialization/serialized_objects.py#L129

The only way I could get it to import successfully was via the following sequence of import statements since [_get_registered_timetable](https://github.com/apache/airflow/blob/fb478c00cdc5e78d5e85fe5ac103707c829be2fb/airflow/serialization/serialized_objects.py#L124) uses a lazy import:
```python
import datetime

from airflow import DAG
from airflow import plugins_manager
from airflow.operators.dummy import DummyOperator

plugins_manager.initialize_timetables_plugins()
from workday import AfterWorkdayTimetable
```

I also had the webserver and scheduler restarted and confirmed the plugin is seen via cli:
```bash
airflow plugins                                                                                                                  ✔  dev-airflow   19:01:43 
name                     | source
=========================+===========================
workday_timetable_plugin | $PLUGINS_FOLDER/workday.py
```

### Are you willing to submit PR?

- [ ] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

airflow/serialization/serialized_objects.py
"""
        Serialize Operator Links. Store the import path of the OperatorLink and the arguments
        passed to it. Example
        ``[{'airflow.providers.google.cloud.operators.bigquery.BigQueryConsoleLink': {}}]``
        :param operator_extra_links: Operator Link
        :return: Serialized Operator Link
        """
        serialize_operator_extra_links = []
        for operator_extra_link in operator_extra_links:
            op_link_arguments = cattr.unstructure(operator_extra_link)
            if not isinstance(op_link_arguments, dict):
                op_link_arguments = {}
            module_path = (
                f"{operator_extra_link.__class__.__module__}.{operator_extra_link.__class__.__name__}"
            )
            serialize_operator_extra_links.append({module_path: op_link_arguments})
        return serialize_operator_extra_links
class SerializedDAG(DAG, BaseSerialization):