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

all of the plugins of that type to the caller.
        :kwarg path_only: If this is set to True, then we return the paths to where the plugins reside
            instead of an instance of the plugin.  This conflicts with class_only and both should
            not be set.
        :kwarg class_only: If this is set to True then we return the python class which implements
            a plugin rather than an instance of the plugin.  This conflicts with path_only and both
            should not be set.
        :kwarg _dedupe: By default, we only return one plugin per plugin name.  Deduplication happens
            in the same way as the :meth:`get` and :meth:`find_plugin` methods resolve which plugin
            should take precedence.  If this is set to False, then we return all of the plugins
            found, including those with duplicate names.  In the case of duplicates, the order in
            which they are returned is the one that would take precedence first, followed by the
            others  in decreasing precedence order.  This should only be used by subclasses which
            want to manage their own deduplication of the plugins.
        :*args: Any extra arguments are passed to each plugin when it is instantiated.
        :**kwargs: Any extra keyword arguments are passed to each plugin when it is instantiated.
        '''
        
        
        
        
        
        
        
        #
        
        
        global _PLUGIN_FILTERS
        dedupe = kwargs.pop('_dedupe', True)
        path_only = kwargs.pop('path_only', False)