### Body

Currently `start_date` is mandatory parameter.
For DAGs with `schedule=None` we can relax this requirement as no scheduling calculation needed so the `start_date` parameter isn't used.

### Committer

- [X] I acknowledge that I am a maintainer/committer of the Apache Airflow project.
@dag_decorator(schedule_interval=None)
        def mydag():
            ...
        with pytest.warns(RemovedInAirflow3Warning) as warnings:
            line = sys._getframe().f_lineno + 1
            mydag()
        w = warnings.pop(RemovedInAirflow3Warning)
        assert w.filename == __file__
        assert w.lineno == line
@pytest.mark.parametrize("timetable", [NullTimetable(), OnceTimetable()])
def test_dag_timetable_match_schedule_interval(timetable):
    dag = DAG("my-dag", timetable=timetable)
    assert dag._check_schedule_interval_matches_timetable()
@pytest.mark.parametrize("schedule_interval", [None, "@once", "@daily", timedelta(days=1)])
def test_dag_schedule_interval_match_timetable(schedule_interval):
    dag = DAG("my-dag", schedule=schedule_interval)
    assert dag._check_schedule_interval_matches_timetable()
@pytest.mark.parametrize("schedule_interval", [None, "@daily", timedelta(days=1)])
def test_dag_schedule_interval_change_after_init(schedule_interval):
    dag = DAG("my-dag", timetable=OnceTimetable())
    dag.schedule_interval = schedule_interval
    assert not dag._check_schedule_interval_matches_timetable()
@pytest.mark.parametrize("timetable", [NullTimetable(), OnceTimetable()])
def test_dag_timetable_change_after_init(timetable):