### Apache Airflow version

2.2.0 (latest released)

### Operating System

Ubuntu

### Versions of Apache Airflow Providers

_No response_

### Deployment

Other

### Deployment details

Just used `airflow standalone`

### What happened

First:

TaskGroup does not show the tooltip that is defined for that group on hover
![2021-10-19_17h00_18](https://user-images.githubusercontent.com/35238779/137937706-376922b8-2f79-47ac-9789-6007d135f855.png)

Second:

Providing an Operator with `task_group=` instead of TaskGroup as context manager ignores that TaskGroup's default_args. Using the code I provided below, the task "end" in section_3 has the wrong owner.


### What you expected to happen

First:

If a TaskGroup is used and the tooltip is defined like so:
```python
with TaskGroup("section_1", tooltip="Tasks for section_1") as section_1:
```
the information provided with`tooltip="..."` should show on hover, as shown in the official documentation at https://airflow.apache.org/docs/apache-airflow/stable/concepts/dags.html#taskgroups


Second:

Defining a TaskGroup with default_args like
```python
section_3 = TaskGroup("section_3", tooltip="Tasks for section_2", default_args={"owner": "bug"})
```
should result in those default_args being used by tasks defined like so:
```python
end = DummyOperator(task_id="end", task_group=section_3)
```

### How to reproduce

I have tested this with the below code

```python
from datetime import datetime

from airflow.models.dag import DAG
from airflow.operators.bash import BashOperator
from airflow.operators.dummy import DummyOperator
from airflow.utils.task_group import TaskGroup

with DAG(
    dag_id="task_group_test",
    start_date=datetime(2021, 1, 1),
    catchup=False,
    tags=["example"],
    default_args={"owner": "test"},
) as dag:
    start = DummyOperator(task_id="start")

    with TaskGroup("section_1", tooltip="Tasks for section_1") as section_1:
        task_1 = DummyOperator(task_id="task_1")
        task_2 = BashOperator(task_id="task_2", bash_command="echo 1")
        task_3 = DummyOperator(task_id="task_3")

        task_1 >> [task_2, task_3]

    with TaskGroup(
        "section_2", tooltip="Tasks for section_2", default_args={"owner": "overwrite"}
    ) as section_2:
        task_1 = DummyOperator(task_id="task_1")

    section_3 = TaskGroup("section_3", tooltip="Tasks for section_3", default_args={"owner": "bug"})

    end = DummyOperator(task_id="end", task_group=section_3)

    start >> section_1 >> section_2 >> section_3
```

### Anything else

_No response_

### Are you willing to submit PR?

- [ ] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

airflow/www/views.py
dag = dag.partial_subset(task_ids_or_regex=root, include_downstream=False, include_upstream=True)
        num_runs = request.args.get('num_runs', type=int)
        if num_runs is None:
            num_runs = conf.getint('webserver', 'default_dag_run_display_number')
        try:
            base_date = timezone.parse(request.args["base_date"])
        except (KeyError, ValueError):
            base_date = dag.get_latest_execution_date() or timezone.utcnow()
        with create_session() as session:
            dag_runs = (
                session.query(DagRun)
                .filter(DagRun.dag_id == dag.dag_id, DagRun.execution_date <= base_date)
                .order_by(DagRun.execution_date.desc())
                .limit(num_runs)
                .all()
            )
            dag_runs = {dr.execution_date: alchemy_to_dict(dr) for dr in dag_runs}
            tree_data = self._get_tree_data(dag_runs, dag, base_date, session=session)
        
        return htmlsafe_json_dumps(tree_data, separators=(',', ':'))
    @expose('/robots.txt')
    @action_logging
    def robots(self):
        """
        Returns a robots.txt file for blocking certain search engine crawlers. This mitigates some
        of the risk associated with exposing Airflow to the public internet, however it does not
        address the real security risks associated with such a deployment.
        """
        return send_from_directory(current_app.static_folder, 'robots.txt')
class ConfigurationView(AirflowBaseView):