<!--- 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
In some cases of nesting `block`s/`import_tasks`' the `fail` module interrupts the Ansible execution and disregards `always` blocks.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
block import_tasks

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
ansible 2.9.15
  config file = <...hidden...>/ansible.cfg
  configured module search path = [u'/home/XXX/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /home/XXX/venv/lib/python2.7/site-packages/ansible
  executable location = /home/XXX/venv/bin/ansible
  python version = 2.7.18rc1 (default, Apr  7 2020, 12:05:55) [GCC 9.3.0]
```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below
ANSIBLE_NOCOWS(<...hidden...>/ansible.cfg) = True
ANY_ERRORS_FATAL(<...hidden...>/ansible.cfg) = True
```

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

<!--- Paste example playbooks or commands between quotes below -->
Create a following file structure:

File: play.yml
```yaml
- hosts: all
  gather_facts: no
  tasks:
  - block:
    - import_tasks: tasks.yml
    always:
      #- debug: msg="First"
      - block:
        - debug: msg="Second"
```
File: tasks.yml
```yaml
- fail: msg="Fail as expected"
```

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

##### EXPECTED RESULTS
<!--- Describe what you expected to happen when running the steps above -->
First, failure message is printed.
Then, debug "Second" is printed.

##### ACTUAL RESULTS
<!--- Describe what actually happened. If possible run with extra verbosity (-vvvv) -->
Failure message is printed.
Debug "second" is **not** printed.
<!--- Paste verbatim command output between quotes -->
```paste below
$ ansible-playbook -i localhost, -c local ../../play.yml 
PLAY [all] ********************************************************************************************************************************************************************************************************

TASK [fail] *******************************************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Fail as expected"}

NO MORE HOSTS LEFT ************************************************************************************************************************************************************************************************

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

```
##### ADDITIONAL INFORMATION
It seems to appear only if `block` is a first element in `always` dictionary. For example in such case:
 File: play.yml
```yaml
- hosts: all
  gather_facts: no
  tasks:
  - block:
    - import_tasks: tasks.yml
    always:
      - debug: msg="First"
      - block:
        - debug: msg="Second"
```
File: tasks.yml
```yaml
- fail: msg="Fail as expected"
```
Everything works as expected and both outer debug and inner debug get's printed:
```
$ ansible-playbook -i localhost, -c local ../../play.yml 
PLAY [all] ********************************************************************************************************************************************************************************************************

TASK [fail] *******************************************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Fail as expected"}

TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "First"
}

TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "Second"
}

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

display.debug("extending task lists for all hosts with included blocks")
                    for host in hosts_left:
                        iterator.add_tasks(host, all_blocks[host])
                    iterator.all_tasks[iterator.cur_task:iterator.cur_task] = included_tasks
                    display.debug("done extending task lists")
                    display.debug("done processing included files")
                display.debug("results queue empty")
                display.debug("checking for any_errors_fatal")
                failed_hosts = []
                unreachable_hosts = []
                for res in results:
                    
                    
                    if (res.is_failed() or res._task.action in C._ACTION_META) and iterator.is_failed(res._host):
                        failed_hosts.append(res._host.name)
                    elif res.is_unreachable():
                        unreachable_hosts.append(res._host.name)
                
                if any_errors_fatal and (len(failed_hosts) > 0 or len(unreachable_hosts) > 0):
                    dont_fail_states = frozenset([IteratingStates.RESCUE, IteratingStates.ALWAYS])
                    for host in hosts_left:
                        (s, dummy) = iterator.get_next_task_for_host(host, peek=True)
                        
                        
                        s = iterator.get_active_state(s)
                        if s.run_state not in dont_fail_states or \
                           s.run_state == IteratingStates.RESCUE and s.fail_state & FailedStates.RESCUE != 0:
                            self._tqm._failed_hosts[host.name] = True