**Description**

It would be nice if the weight_rule default value could be managed by a global config

suggested config:
```
# Weighting method used for the effective total priority weight of the task. 
# Options are: { downstream | upstream | absolute } default is
default_weight_rule = downstream
```
**Use case / motivation**

In some pipeline, you really need to have absolute weight, and then you have to add a line in each task definition which is annoying

airflow/models/baseoperator.py
List[airflow.utils.EdgeModifier], airflow.utils.EdgeModifier, List[airflow.models.XComArg], XComArg,
        List[airflow.utils.TaskGroup], or airflow.utils.TaskGroup
    """
    from airflow.models.xcom_arg import XComArg
    from airflow.utils.task_group import TaskGroup
    chainable_types = (BaseOperator, XComArg, EdgeModifier, TaskGroup)
    for index, up_task in enumerate(tasks[:-1]):
        down_task = tasks[index + 1]
        if isinstance(up_task, chainable_types):
            up_task.set_downstream(down_task)
            continue
        if isinstance(down_task, chainable_types):
            down_task.set_upstream(up_task)
            continue
        if not isinstance(up_task, Sequence) or not isinstance(down_task, Sequence):
            raise TypeError(
                'Chain not supported between instances of {up_type} and {down_type}'.format(
                    up_type=type(up_task), down_type=type(down_task)
                )
            )
        up_task_list = up_task
        down_task_list = down_task
        if len(up_task_list) != len(down_task_list):
            raise AirflowException(
                f'Chain not supported for different length Iterable. '
                f'Got {len(up_task_list)} and {len(down_task_list)}.'
            )
        for up_t, down_t in zip(up_task_list, down_task_list):
            up_t.set_downstream(down_t)
def cross_downstream(