### 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.
from dateutil.relativedelta import relativedelta
from sqlalchemy import inspect
from airflow import settings
from airflow.configuration import conf
from airflow.datasets import Dataset
from airflow.decorators import setup, task as task_decorator, teardown
from airflow.exceptions import (
    AirflowException,
    DuplicateTaskIdFound,
    ParamValidationError,
    RemovedInAirflow3Warning,
)
from airflow.models.baseoperator import BaseOperator
from airflow.models.dag import (
    DAG,
    DagModel,
    DagOwnerAttributes,
    DagTag,
    dag as dag_decorator,
    get_dataset_triggered_next_run_info,
)
from airflow.models.dagrun import DagRun
from airflow.models.dataset import DatasetDagRunQueue, DatasetEvent, DatasetModel, TaskOutletDatasetReference
from airflow.models.param import DagParam, Param, ParamsDict
from airflow.models.serialized_dag import SerializedDagModel
from airflow.models.taskfail import TaskFail
from airflow.models.taskinstance import TaskInstance as TI
from airflow.operators.bash import BashOperator
from airflow.operators.empty import EmptyOperator
from airflow.operators.python import PythonOperator