<!--- 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 -->

A role provided via collection that includes a call to setup: gather_subset fails because the windows powershell version of setup is picked.

##### ISSUE TYPE
- Bug Report

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

ansible plugin loader

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```
ansible 2.9.1
  config file = None
  configured module search path = ['/home/aschultz/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/aschultz/.virtualenvs/ansible/lib/python3.6/site-packages/ansible
  executable location = /home/aschultz/.virtualenvs/ansible/bin/ansible
  python version = 3.6.8 (default, Oct  8 2019, 16:29:04) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
```

Also tested
```
ansible 2.10.0.dev0
  config file = None
  configured module search path = ['/home/aschultz/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/aschultz/.virtualenvs/ansible-devel/lib/python3.6/site-packages/ansible-2.10.0.dev0-py3.6.egg/ansible
  executable location = /home/aschultz/.virtualenvs/ansible-devel/bin/ansible
  python version = 3.6.8 (default, Oct  8 2019, 16:29:04) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
```

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

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

On a fedora31 host running under python 3.6.8 in a virtual environment against a CentOS7 host or against the localhost


##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->
I have provided a sample collection that reproduces the problem:

https://github.com/mwhahaha/ansible-collection-failure

On a linux host do:

```
git clone https://github.com/mwhahaha/ansible-collection-failure
cd ansible-collection-failure
ansible-galaxy collection build failure
ansible-galaxy collection install mwhahaha-failure-1.0.0.tar.gz
ansible-playbook sigh.yml
```

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

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

setup gather_subset should complete successfully. 

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

Ansible attempts to use the powershell setup module on a linux system.
<!--- Paste verbatim command output between quotes -->
```
$ ansible-playbook sigh.yml 
[WARNING]: No inventory was parsed, only implicit localhost is available

[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'


PLAY [localhost] *********************************************************************************************************************************************************************

TASK [orly] **************************************************************************************************************************************************************************

TASK [sadness : Gather facts for sadness] ********************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "module_stderr": "/bin/sh: powershell: command not found\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 127}

PLAY RECAP ***************************************************************************************************************************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0 
```

class_only = kwargs.pop('class_only', False)
        
        if path_only and class_only:
            raise AnsibleError('Do not set both path_only and class_only when calling PluginLoader.all()')
        all_matches = []
        found_in_cache = True
        for i in self._get_paths():
            all_matches.extend(glob.glob(os.path.join(i, "*.py")))
        loaded_modules = set()
        for path in sorted(all_matches, key=os.path.basename):
            name = os.path.splitext(path)[0]
            basename = os.path.basename(name)
            if basename == '__init__' or basename in _PLUGIN_FILTERS[self.package]:
                continue
            if dedupe and basename in loaded_modules:
                continue
            loaded_modules.add(basename)
            if path_only:
                yield path
                continue
            if path not in self._module_cache:
                try:
                    if self.subdir in ('filter_plugins', 'test_plugins'):
                        
                        
                        full_name = '{0}_{1}'.format(abs(hash(path)), basename)
                    else:
                        full_name = basename
                    module = self._load_module_source(full_name, path)
                    self._load_config_defs(basename, module, path)