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

If you use the free strategy with a complex playbook that has a mix of regular tasks, roles and handlers, some nodes may fail because the strategy attempts to load ansible roles as files when handlers are run.

I tracked it down to the _do_handler_run in the lib/ansible/plugins/strategy/__init__.py because included_files are not check to see if they are a role before being included. 

https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/strategy/free.py#L240-L259
vs
https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/strategy/__init__.py#L1005-L1031

##### ISSUE TYPE
- Bug Report

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

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
ansible 2.9.7
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/centos/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, Nov 21 2019, 19:31:34) [GCC 8.3.1 20190507 (Red Hat 8.3.1-4)]
```

##### 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. -->
CentOS8

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

<!--- Paste example playbooks or commands between quotes below -->
```yaml
TBD.
```

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

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

No error because it correctly loads the role

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

<!--- Paste verbatim command output between quotes -->
```paste below
fatal: [overcloud-novacompute-0]: FAILED! => {
    "reason": "Could not find or access '/home/centos/config-download/overcloud/tripleo_timezone' on the Ansible Controller. Traceback (most recent call last):\n  File \"/usr/lib/python3.6/site-packages/ansible/plugins/strategy/__init__.py\", line 869, in _load_included_file\n    data = self._loader.load_from_file(included_file._filename)\n  File \"/usr/lib/python3.6/site-packages/ansible/parsing/dataloader.py\", line 94, in load_from_file\n    (b_file_data, show_content) = self._get_file_contents(file_name)\n  File \"/usr/lib/python3.6/site-packages/ansible/parsing/dataloader.py\", line 162, in _get_file_contents\n    raise AnsibleFileNotFound(\"Unable to retrieve file contents\", file_name=file_name)\nansible.errors.AnsibleFileNotFound: Unable to retrieve file contents\nCould not find or access '/home/centos/config-download/overcloud/tripleo_timezone' on the Ansible Controller.\nIf you are using a module and expect the file to exist on the remote, see the remote_src option\n"
}

```

if target_handler is not None:
                                    found = True
                                    if target_handler.notify_host(original_host):
                                        self._tqm.send_callback('v2_playbook_on_notify', target_handler, original_host)
                                for listening_handler_block in iterator._play.handlers:
                                    for listening_handler in listening_handler_block.block:
                                        listeners = getattr(listening_handler, 'listen', []) or []
                                        if not listeners:
                                            continue
                                        listeners = listening_handler.get_validated_value(
                                            'listen', listening_handler._valid_attrs['listen'], listeners, handler_templar
                                        )
                                        if handler_name not in listeners:
                                            continue
                                        else:
                                            found = True
                                        if listening_handler.notify_host(original_host):
                                            self._tqm.send_callback('v2_playbook_on_notify', listening_handler, original_host)
                                
                                if not found:
                                    msg = ("The requested handler '%s' was not found in either the main handlers list nor in the listening "
                                           "handlers list" % handler_name)
                                    if C.ERROR_ON_MISSING_HANDLER:
                                        raise AnsibleError(msg)
                                    else:
                                        display.warning(msg)
                    if 'add_host' in result_item:
                        
                        new_host_info = result_item.get('add_host', dict())
                        self._add_host(new_host_info, iterator)