### Summary

When a task is named with the word meta (like `- name: "meta"`), the task fails with the following error : 
```
ERROR! Unexpected Exception, this is probably a bug: '_raw_params'
```


### Issue Type

Bug Report

### Component Name

all

### Ansible Version

```console
$ ansible --version
ansible 2.10.8
  config file = /home/utilisateur/ansible/prj_chainage_traitement/ansible.cfg
  configured module search path = ['/home/utilisateur/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110]
```



### OS / Environment

Linux Debian 11.1

### Steps to Reproduce

The following playbook reproduces this issue : 
```yaml
- hosts: localhost
  gather_facts: no
  connection: localhost
  tasks:
    - name: "meta"
      debug:
        msg: "abcdefgh"
```
 

### Expected Results

You should obtain : 
```
TASK [meta] 
ok: [localhost] => {
	"msg": "abcdefgh"
}
``` 

When name is changed (ex.: `- name: "meta"`), there is no error.

Ansible should generate an error when the user tries to name a task `meta`.

### Actual Results


The following error is returned : 

```console
PLAY [localhost] ***********
ERROR! Unexpected Exception, this is probably a bug: '_raw_params'
to see the full traceback, use -vvv
```

With verbose mode, a Python exception is returned : 
```
PLAY [localhost] *******************
META: ran handlers
ERROR! Unexpected Exception, this is probably a bug: '_raw_params'
the full traceback was:

Traceback (most recent call last):
  File "/usr/bin/ansible-playbook", line 123, in <module>
	exit_code = cli.run()
  File "/usr/lib/python3/dist-packages/ansible/cli/playbook.py", line 129, in run
	results = pbex.run()
  File "/usr/lib/python3/dist-packages/ansible/executor/playbook_executor.py", line 169, in run
	result = self._tqm.run(play=play)
  File "/usr/lib/python3/dist-packages/ansible/executor/task_queue_manager.py", line 281, in run
	play_return = strategy.run(iterator, play_context)
  File "/usr/lib/python3/dist-packages/ansible/plugins/strategy/linear.py", line 224, in run
	host_tasks = self._get_next_task_lockstep(hosts_left, iterator)
  File "/usr/lib/python3/dist-packages/ansible/plugins/strategy/linear.py", line 97, in _get_next_task_lockstep
	host_tasks[host.name] = iterator.get_next_task_for_host(host, peek=True)
  File "/usr/lib/python3/dist-packages/ansible/executor/play_iterator.py", line 253, in get_next_task_for_host
	display.debug(" ^ task is: %s" % task)
  File "/usr/lib/python3/dist-packages/ansible/playbook/task.py", line 156, in __repr__
	return "TASK: meta (%s)" % self.args['_raw_params']
KeyError: '_raw_params'
```
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
'''
        Sets the loader on this object and recursively on parent, child objects.
        This is used primarily after the Task has been serialized/deserialized, which
        does not preserve the loader.
        '''
        self._loader = loader
        if self._parent:
            self._parent.set_loader(loader)
    def _get_parent_attribute(self, attr, omit=False):
        '''
        Generic logic to get the attribute or parent attribute for a task value.
        '''
        fattr = self.fattributes[attr]
        extend = fattr.extend
        prepend = fattr.prepend
        try:
            
            if omit:
                value = Sentinel
            else:
                value = getattr(self, f'_{attr}', Sentinel)