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.

print("teardown")
        @teardown
        def teardowntask2():
            print("teardown")
        @task()
        def mytask():
            print("mytask")
        @task()
        def mytask2():
            print("mytask")
        with dag_maker() as dag:
            setuptask()
            teardowntask()
            setuptask2()
            teardowntask2()
            mytask()
            mytask2()
        assert len(dag.task_group.children) == 6
        assert [x for x in dag.tasks if not x.downstream_list]  
        assert dag.task_group.children["setuptask"].is_setup
        assert dag.task_group.children["teardowntask"].is_teardown
        assert dag.task_group.children["setuptask2"].is_setup
        assert dag.task_group.children["teardowntask2"].is_teardown
        assert dag.task_group.children["mytask"].is_setup is False
        assert dag.task_group.children["mytask"].is_teardown is False
        assert dag.task_group.children["mytask2"].is_setup is False
        assert dag.task_group.children["mytask2"].is_teardown is False
    def test_setup_teardown_as_context_manager_normal_tasks_rel_set_downstream(self, dag_maker):