##### 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'
```

'''
        Iterates over the roles/tasks in a play, using the given (or default)
        strategy for queueing tasks. The default is the linear strategy, which
        operates like classic Ansible by keeping all hosts in lock-step with
        a given task (meaning no hosts move on to the next task until all hosts
        are done with the current task).
        '''
        if not self._callbacks_loaded:
            self.load_callbacks()
        all_vars = self._variable_manager.get_vars(play=play)
        templar = Templar(loader=self._loader, variables=all_vars)
        warn_if_reserved(all_vars, templar.environment.globals.keys())
        new_play = play.copy()
        new_play.post_validate(templar)
        new_play.handlers = new_play.compile_roles_handlers() + new_play.handlers
        self.hostvars = HostVars(
            inventory=self._inventory,
            variable_manager=self._variable_manager,
            loader=self._loader,
        )
        play_context = PlayContext(new_play, self.passwords, self._connection_lockfile.fileno())
        if (self._stdout_callback and
                hasattr(self._stdout_callback, 'set_play_context')):
            self._stdout_callback.set_play_context(play_context)
        for callback_plugin in self._callback_plugins:
            if hasattr(callback_plugin, 'set_play_context'):
                callback_plugin.set_play_context(play_context)