##### SUMMARY
ansible_play_batch variable is including unreachable hosts

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
ansible_play_batch

##### ANSIBLE VERSION
```paste below
ansible 2.9.2
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/[removed]/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /[removed]/.local/lib/python3.5/site-packages/ansible
  executable location = /[removed]/.local/bin/ansible
  python version = 3.5.2 (default, Oct  8 2019, 13:06:37) [GCC 5.4.0 20160609]

```

##### CONFIGURATION
```paste below
DEFAULT_FORKS(/etc/ansible/ansible.cfg) = 25
DEFAULT_HOST_LIST(/etc/ansible/ansible.cfg) = ['/etc/ansible/inventory']
DEFAULT_LOG_PATH(/etc/ansible/ansible.cfg) = /var/log/ansible/ansible.log
TRANSFORM_INVALID_GROUP_CHARS(/etc/ansible/ansible.cfg) = ignore

```

##### OS / ENVIRONMENT
ubuntu 16.04


##### STEPS TO REPRODUCE
When evaluating ansible_play_batch  using jinja in a playbook, ansible_play_batch returns an unreachable hosts, causing the entire play example below to fail (due to run_once). To reproduce, target two machines, and reboot one machine mid-play (causing an unreachable on that machine).

<!--- Paste example playbooks or commands between quotes below -->
```yaml
  - set_fact:
        emailBody: |
          {% for item in ansible_play_batch -%}
          {% if hostvars[item].kernelVersion != hostvars[item].currentKernel.stdout %}
          {{ hostvars[item].inventory_hostname + ' - ' + hostvars[item].currentKernel.stdout + ' - ' + hostvars[item].kernelVersion }}
          {% endif %}
          {%- endfor %}
    delegate_to: 127.0.0.1
    run_once: True
```


##### EXPECTED RESULTS
ansible_play_batch only includes all non-failed/non-unreachable hosts per documentation found at https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html


##### ACTUAL RESULTS
ansible_play_batch  is including the rebooted (unreachable) machine. 

<!--- Paste verbatim command output between quotes -->
```paste below
"The task includes an option with an undefined variable. The error was: 'ansible.vars.hostvars.HostVarsVars object' has no attribute 'kernelVersion'
```

raise AnsibleError("Unable to use multiprocessing, this is normally caused by lack of access to /dev/shm: %s" % to_native(e))
        self._callback_lock = threading.Lock()
        
        
        self._connection_lockfile = tempfile.TemporaryFile()
    def _initialize_processes(self, num):
        self._workers = []
        for i in range(num):
            self._workers.append(None)
    def load_callbacks(self):
        '''
        Loads all available callbacks, with the exception of those which
        utilize the CALLBACK_TYPE option. When CALLBACK_TYPE is set to 'stdout',
        only one such callback plugin will be loaded.
        '''
        if self._callbacks_loaded:
            return
        stdout_callback_loaded = False
        if self._stdout_callback is None:
            self._stdout_callback = C.DEFAULT_STDOUT_CALLBACK
        if isinstance(self._stdout_callback, CallbackBase):
            stdout_callback_loaded = True
        elif isinstance(self._stdout_callback, string_types):
            if self._stdout_callback not in callback_loader:
                raise AnsibleError("Invalid callback for stdout specified: %s" % self._stdout_callback)
            else:
                self._stdout_callback = callback_loader.get(self._stdout_callback)
                self._stdout_callback.set_options()
                stdout_callback_loaded = True
        else: