### Summary

`setup` module displays facts inside `ansible_facts` dict, but with `ansible_` prefix, also `filter` acts on injected variable names instead of facts, expecting `ansible_` prefix.

### Issue Type

Bug Report

### Component Name

setup

### Ansible Version

```console
$ ansible --version
ansible 2.10.8
  config file = /home/username/.ansible.cfg
  configured module search path = ['/home/username/.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]
```


### Configuration

```console
$ ansible-config dump --only-changed
```


### OS / Environment

Debian testing, FreeBSD 12

### Steps to Reproduce

<!--- Paste example playbooks or commands between quotes below -->

```
$ ansible localhost -m setup -a 'filter=date_time'
```

### Expected Results

I expect facts to be named as is when inside `ansible_facts` dict, and with `ansible_` prefix when injected into variable space. Since `setup` module shows results as being inside `ansible_facts` dict, it should not add `ansible_` prefix to them. `filter` parameter should also act on fact names, not on injected variables. (or at least have a clear option for such behavior).

```
$ ansible localhost -m setup -a 'filter=date_time'
localhost | SUCCESS => {
    "ansible_facts": {
        "date_time": {
            "date": "2021-06-07",
            ...
        }
    },
    "changed": false
}
```

### Actual Results

```console
$ ansible localhost -m setup -a 'filter=date_time'
localhost | SUCCESS => {
    "ansible_facts": {},
    "changed": false
}
```
```
$ ansible localhost -m setup -a 'filter=*date_time'
localhost | SUCCESS => {
    "ansible_facts": {
        "ansible_date_time": {
            "date": "2021-06-07",
            ...
        }
    },
    "changed": false
}
```
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
super(AnsibleFactCollector, self).__init__(collectors=collectors,
                                                   namespace=namespace)
        self.filter_spec = filter_spec
    def _filter(self, facts_dict, filter_spec):
        
        if not filter_spec or filter_spec == '*':
            return facts_dict
        if is_string(filter_spec):
            filter_spec = [filter_spec]
        return [(x, y) for x, y in facts_dict.items() for f in filter_spec if not f or fnmatch.fnmatch(x, f)]
    def collect(self, module=None, collected_facts=None):
        collected_facts = collected_facts or {}
        facts_dict = {}
        for collector_obj in self.collectors:
            info_dict = {}
            try:
                
                info_dict = collector_obj.collect_with_namespace(module=module,
                                                                 collected_facts=collected_facts)
            except Exception as e:
                sys.stderr.write(repr(e))
                sys.stderr.write('\n')
            
            
            collected_facts.update(info_dict.copy())
            
            facts_dict.update(self._filter(info_dict, self.filter_spec))
        return facts_dict
class CollectorMetaDataCollector(collector.BaseFactCollector):