<!--- Verify first that your issue is not already reported on GitHub -->
<!--- Also test if the latest release and devel branch are affected too -->
<!--- Complete *all* sections as described, this form is processed automatically -->

##### SUMMARY
<!--- Explain the problem briefly below -->
When executing the gather_facts module with a list of fact gathering modules the results aren't combined. Instead, the result from one fact gathering module replaces all others.

This is caused by gather_facts calling `combine_vars()`

https://github.com/ansible/ansible/blob/0f5a63f1b99e586f86932907c49b1e8877128957/lib/ansible/plugins/action/gather_facts.py#L49-L55

which defaults to doing a replacement instead of a merge:

https://github.com/ansible/ansible/blob/0f5a63f1b99e586f86932907c49b1e8877128957/lib/ansible/utils/vars.py#L80-L92

AFAICS, in the context of this gather_facts module the replacement strategy doesn't make any sense.

Thus I suggest to replace the `combine_vars()` calls in `gather_facts.py` with `merge_hash()`.

See also @bcoca's gather_facts pull request #49399 which introduced the possibility to configure multiple fact gathering modules and execute them in parallel.

Sure, one can kind of work around this by also setting `ANSIBLE_HASH_BEHAVIOUR=merge` but then you get the merge behavior everywhere, i.e. also when overwriting variables during playbook execution etc. So that isn't a real work around, at all.

Again, I can't see a use case where the default replace behavior would be useful when using `gather_facts` since _the_ goal of configuring multiple facts modules is to have their results combined.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
<!--- Write the short name of the module, plugin, task or feature below, use your best guess if unsure -->

gather_facts

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
ansible 2.9.6
  config file = /home/gms/program/mailserver/ansible.cfg
  configured module search path = ['/home/gms/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.7.6 (default, Jan 30 2020, 09:44:41) [GCC 9.2.1 20190827 (Red Hat 9.2.1-1)]
```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below

```

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->

- Fedora 31
- ansible-2.9.6-1.fc31.noarch

##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->

<!--- Paste example playbooks or commands between quotes below -->
```
ANSIBLE_FACTS_MODULES=setup,package_facts ansible all -i myhost, -m gather_facts --tree facts >/dev/null 2>&1
grep '"ansible_distribution":\|"packages":' -o facts -r
ANSIBLE_FACTS_MODULES=package_facts,setup ansible all -i myhost, -m gather_facts --tree facts >/dev/null 2>&1
grep '"ansible_distribution":\|"packages":' -o facts -r                                        
```

<!--- HINT: You can paste gist.github.com links for larger files -->

##### EXPECTED RESULTS
<!--- Describe what you expected to happen when running the steps above -->

I expect that the created json facts file contains the facts both from the `setup` and `package_facts` facts gathering modules, i.e. the above two greps should yield output similar to:

```
facts/myhost:"ansible_distribution":
facts/myhost:"packages":
facts/myhost:"ansible_distribution":
facts/myhost:"packages":
```

##### ACTUAL RESULTS
<!--- Describe what actually happened. If possible run with extra verbosity (-vvvv) -->

Note how I only get the results from the `package_facts` fact gathering module - even when I reverse the list of fact gathering modules.  The results from the `setup` gathering module are missing.

<!--- Paste verbatim command output between quotes -->
```paste below
facts/myhost:"packages":
facts/myhost:"packages":
```

AFAICS, the result that the order of the FACTS_MODULES doesn't make a difference is caused by the fact that they are executed in parallel, by default.


filtered_res = {
            'ansible_facts': task_result.get('ansible_facts', {}),
            'warnings': task_result.get('warnings', []),
            'deprecations': task_result.get('deprecations', []),
        }
        return combine_vars(result, filtered_res)
    def run(self, tmp=None, task_vars=None):
        self._supports_check_mode = True
        result = super(ActionModule, self).run(tmp, task_vars)
        result['ansible_facts'] = {}
        modules = C.config.get_config_value('FACTS_MODULES', variables=task_vars)