Currently when you define a teardown

e.g. 

```
@teardown(on_failure_fail_dagrun=True)
def my_teardown():
    ...
```

You can not change this when you instantiate the task

e.g. with 

```
my_teardown.override(on_failure_fail_dagrun=True)()
```

I don't think this is good because if you define a reusable taskflow function then it might depend on the context.

@teardown
        @task
        def mytask():
            print("I am a teardown task")
        with dag_maker() as dag:
            mytask()
        assert len(dag.task_group.children) == 1
        teardown_task = dag.task_group.children["mytask"]
        assert teardown_task.is_teardown
    def test_marking_operator_as_teardown_task(self, dag_maker):
        with dag_maker() as dag:
            BashOperator.as_teardown(task_id="mytask", bash_command='echo "I am a setup task"')
        assert len(dag.task_group.children) == 1
        teardown_task = dag.task_group.children["mytask"]
        assert teardown_task.is_teardown
    def test_setup_taskgroup_decorator(self, dag_maker):
        with dag_maker():
            with pytest.raises(
                expected_exception=AirflowException,
                match="Task groups cannot be marked as setup or teardown.",
            ):
                @setup
                @task_group
                def mygroup():
                    @task
                    def mytask():
                        print("I am a setup task")
                    mytask()
                mygroup()
    def test_teardown_taskgroup_decorator(self, dag_maker):