### Summary

In 2.11.7 when using strategy=free, the task names that are printed for each task are often names from different tasks and not the task that is being executed.  

The task names are mixed up between hosts, between lines within a role, and even between roles (task files).

Also TASK lines are printed without any other output, not even name of the host where the supposed task is running.

### Issue Type

Bug Report

### Component Name

pip

### Ansible Version

```console
$ ansible --version
ansible [core 2.11.7]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/x/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /opt/venv/lib64/python3.6/site-packages/ansible
  ansible collection location = /home/x/.ansible/collections:/usr/share/ansible/collections
  executable location = /opt/venv/bin/ansible
  python version = 3.6.8 (default, Nov 16 2020, 16:55:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
  jinja version = 3.0.2
  libyaml = True
```


### Configuration

```console
$ ansible-config dump --only-changed
CALLBACKS_ENABLED(/etc/ansible/ansible.cfg) = ['ansible.posix.timer']
CONTROLLER_PYTHON_WARNING(/etc/ansible/ansible.cfg) = False
DEFAULT_FORKS(/etc/ansible/ansible.cfg) = 10
DEFAULT_STDOUT_CALLBACK(/etc/ansible/ansible.cfg) = community.general.yaml
DEFAULT_STRATEGY(/etc/ansible/ansible.cfg) = ansible.builtin.free
DEFAULT_TIMEOUT(/etc/ansible/ansible.cfg) = 30
DEFAULT_VAULT_ID_MATCH(/etc/ansible/ansible.cfg) = True
INJECT_FACTS_AS_VARS(/etc/ansible/ansible.cfg) = False
```


### OS / Environment

EL7

### Steps to Reproduce

<!--- Paste example playbooks or commands between quotes below -->
```yaml (paste below)

```


### Expected Results

As in 2.9 Ansible should not print useless "TASK" lines and should print the right task name to go with each task output.

### Actual Results

```console
Example:

TASK [rolename : Install xinetd with yum] *************************************************************************************************************************************
task path: /home/x/roles/rolename/tasks/main.yml:190

TASK [rolename : Install xinetd with yum] *************************************************************************************************************************************
task path: /home/x/roles/rolename/tasks/main.yml:184
ok: [hostb.example.com] => changed=false
  backup: ''
  msg: ''

TASK [rolename : Install xinetd with yum] *************************************************************************************************************************************
task path: /home/x/roles/rolename/tasks/main.yml:190

TASK [rolename : Install xinetd with yum] *************************************************************************************************************************************
task path: /home/x/roles/rolename/tasks/main.yml:184
ok: [hostc.example.com] => changed=false
  backup: ''
  msg: ''

TASK [rolename : Install xinetd with yum] *************************************************************************************************************************************
task path: /home/x/roles/rolename/tasks/main.yml:190
ok: [hosta.example.com] => changed=false
  msg: ''
  rc: 0
  results:
  - 2:xinetd-2.3.15-14.el7.x86_64 providing xinetd is already installed

TASK [rolename : Change line in configuration file] ***************************************************************************************************************
task path: /home/x/roles/rolename/tasks/main.yml:196

TASK [rolename : Change line in configuration file] ***************************************************************************************************************
task path: /home/x/roles/rolename/tasks/main.yml:190
ok: [hostb.example.com] => changed=false
  msg: ''
  rc: 0
  results:
  - 2:xinetd-2.3.15-14.el7.x86_64 providing xinetd is already installed

TASK [rolename : Change line in configuration file] ***************************************************************************************************************
task path: /home/x/roles/rolename/tasks/main.yml:196

TASK [rolename : Change line in configuration file] ***************************************************************************************************************
task path: /home/x/roles/rolename/tasks/main.yml:190
ok: [hostc.example.com] => changed=false
  msg: ''
  rc: 0
  results:
  - 2:xinetd-2.3.15-14.el7.x86_64 providing xinetd is already installed

TASK [rolename : Change line in configuration file] ***************************************************************************************************************
task path: /home/x/roles/rolename/tasks/main.yml:196
ok: [hosta.example.com] => changed=false
  backup: ''
  msg: ''

TASK [rolename : Change another line in file] **************************************************************************************************************
task path: /home/x/roles/rolename/tasks/main.yml:204

TASK [rolename : Change another line in file] **************************************************************************************************************
task path: /home/x/roles/rolename/tasks/main.yml:196
ok: [hostb.example.com] => changed=false
  backup: ''
  msg: ''

TASK [rolename : Change another line in file] **************************************************************************************************************
task path: /home/x/roles/rolename/tasks/main.yml:204

TASK [rolename : Change another line in file] **************************************************************************************************************
task path: /home/x/roles/rolename/tasks/main.yml:196
ok: [hostc.example.com] => changed=false
  backup: ''
  msg: ''

The above log consists of 14 "TASK" lines. Most of those are wrong:
1. Correct task name for line number 190. But no hostname and no output from task, seems this line is useless.
2. Incorrect task name for line number 184, as seen from command output it is a "lineinfile" task, named "Add line in file". It is not a "yum" task.
3. Repeating #1.
4. Same as #2 but different host.
5. Finally a correct task name, this is a "yum" task output.
6. Correct task name for line number 196. But no hostname and no output from task, seems this line is useless.
7. Incorrect task name for line number 190, this time it is indeed a "yum" task but the TASK name printed is for a "lineinfile" task.
8. Correct task name for line number 196. But no hostname and no output from task, seems this line is useless.
9. Same as #7.
10. Finally a correct task name, this is a "lineinfile" task output.
11. Correct task name for line number 204. But no hostname and no output from task, seems this line is useless.
12. Incorrect task name for line number 196.
13. Correct task name for line number 204. But no hostname and no output from task, seems this line is useless.
14. Incorrect task name for line number 196.

Out of 14 (!!!) "TASK" lines and all the other lines that go with them, only:
- 3 occurrences had right task name for the line number and had some useful information (host name, task output).
- 6 lines (and the following role file + line number, empty line) seemed useless.

This makes Ansible output hugely long with all the useless 3 line combinations of TASK+file/linenumber+empty line.

Not to mention I have to manually decode each file + line number because the task name printed is often wrong.
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
msg = 'included: %s for %s' % (included_file._filename, ", ".join([h.name for h in included_file._hosts]))
        label = self._get_item_label(included_file._vars)
        if label:
            msg += " => (item=%s)" % label
        self._display.display(msg, color=C.COLOR_SKIP)
    def v2_playbook_on_stats(self, stats):
        self._display.banner("PLAY RECAP")
        hosts = sorted(stats.processed.keys())
        for h in hosts:
            t = stats.summarize(h)
            self._display.display(
                u"%s : %s %s %s %s %s %s %s" % (
                    hostcolor(h, t),
                    colorize(u'ok', t['ok'], C.COLOR_OK),
                    colorize(u'changed', t['changed'], C.COLOR_CHANGED),
                    colorize(u'unreachable', t['unreachable'], C.COLOR_UNREACHABLE),
                    colorize(u'failed', t['failures'], C.COLOR_ERROR),
                    colorize(u'skipped', t['skipped'], C.COLOR_SKIP),
                    colorize(u'rescued', t['rescued'], C.COLOR_OK),
                    colorize(u'ignored', t['ignored'], C.COLOR_WARN),
                ),
                screen_only=True
            )
            self._display.display(