### Summary

The "block" action is very useful, but unfortunately fails with the following error when nested inside of handlers.

> ERROR! Unexpected Exception, this is probably a bug: 'Block' object has no attribute 'is_host_notified'

```
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/dist-packages/ansible/cli/__init__.py", line 647, in cli_executor
    exit_code = cli.run()
  File "/usr/local/lib/python3.9/dist-packages/ansible/cli/playbook.py", line 143, in run
    results = pbex.run()
  File "/usr/local/lib/python3.9/dist-packages/ansible/executor/playbook_executor.py", line 190, in run
    result = self._tqm.run(play=play)
  File "/usr/local/lib/python3.9/dist-packages/ansible/executor/task_queue_manager.py", line 333, in run
    play_return = strategy.run(iterator, play_context)
  File "/usr/local/lib/python3.9/dist-packages/ansible/plugins/strategy/linear.py", line 151, in run
    host_tasks = self._get_next_task_lockstep(hosts_left, iterator)
  File "/usr/local/lib/python3.9/dist-packages/ansible/plugins/strategy/linear.py", line 71, in _get_next_task_lockstep
    state, task = iterator.get_next_task_for_host(host, peek=True)
  File "/usr/local/lib/python3.9/dist-packages/ansible/executor/play_iterator.py", line 258, in get_next_task_for_host
    (s, task) = self._get_next_task_from_state(s, host=host)
  File "/usr/local/lib/python3.9/dist-packages/ansible/executor/play_iterator.py", line 452, in _get_next_task_from_state
    if task.is_host_notified(host):
AttributeError: 'Block' object has no attribute 'is_host_notified'
```

### Issue Type

Bug Report

### Component Name

core

### Ansible Version

```console
$ ansible --version
ansible [core 2.14.2]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.9/dist-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110] (/usr/bin/python3)
  jinja version = 3.1.2
  libyaml = True
```


### Configuration

```console
# if using a version older than ansible-core 2.12 you should omit the '-t all'
$ ansible-config dump --only-changed -t all
CONFIG_FILE() = None
```


### OS / Environment

Debian Bullseye

### Steps to Reproduce

<!--- Paste example playbooks or commands between quotes below -->
test.yml:
```yaml (paste below)
- hosts: localhost
  connection: local
  gather_facts: no
  tasks:
    - name: test task
      pause: ""
      changed_when: true
      notify: test handler
  handlers:
    - name: test handler
      block:
        - name: task in block
          pause: ""
        - name: nested block
          block:
            - name: task in nested block
              pause: ""
```

Run with:
```
ansible-playbook -vvv -i localhost, test.yml
```

### Expected Results

Should reach and execute "task in nested block"

### Actual Results

```console
ansible-playbook [core 2.14.2]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.9/dist-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110] (/usr/bin/python3)
  jinja version = 3.1.2
  libyaml = True
No config file found; using defaults
Parsed localhost, inventory source with host_list plugin
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: test.yml *******************************************************************************************************************************************************************************1 plays in test.yml

PLAY [localhost] *********************************************************************************************************************************************************************************ERROR! Unexpected Exception, this is probably a bug: 'Block' object has no attribute 'is_host_notified'
the full traceback was:

Traceback (most recent call last):
  File "/usr/local/lib/python3.9/dist-packages/ansible/cli/__init__.py", line 647, in cli_executor
    exit_code = cli.run()
  File "/usr/local/lib/python3.9/dist-packages/ansible/cli/playbook.py", line 143, in run
    results = pbex.run()
  File "/usr/local/lib/python3.9/dist-packages/ansible/executor/playbook_executor.py", line 190, in run
    result = self._tqm.run(play=play)
  File "/usr/local/lib/python3.9/dist-packages/ansible/executor/task_queue_manager.py", line 333, in run
    play_return = strategy.run(iterator, play_context)
  File "/usr/local/lib/python3.9/dist-packages/ansible/plugins/strategy/linear.py", line 151, in run
    host_tasks = self._get_next_task_lockstep(hosts_left, iterator)
  File "/usr/local/lib/python3.9/dist-packages/ansible/plugins/strategy/linear.py", line 71, in _get_next_task_lockstep
    state, task = iterator.get_next_task_for_host(host, peek=True)
  File "/usr/local/lib/python3.9/dist-packages/ansible/executor/play_iterator.py", line 258, in get_next_task_for_host
    (s, task) = self._get_next_task_from_state(s, host=host)
  File "/usr/local/lib/python3.9/dist-packages/ansible/executor/play_iterator.py", line 452, in _get_next_task_from_state
    if task.is_host_notified(host):
AttributeError: 'Block' object has no attribute 'is_host_notified'
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
#
#
#
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os
from units.compat import unittest
from unittest.mock import MagicMock
from units.mock.loader import DictDataLoader
from ansible import errors
from ansible.playbook.block import Block
from ansible.playbook.handler import Handler
from ansible.playbook.task import Task
from ansible.playbook.task_include import TaskInclude
from ansible.playbook.role.include import RoleInclude
from ansible.playbook import helpers
class MixinForMocks(object):
    def _setup(self):
        
        self.fake_loader = DictDataLoader({'include_test.yml': "",
                                           'other_include_test.yml': ""})
        self.mock_tqm = MagicMock(name='MockTaskQueueManager')
        self.mock_play = MagicMock(name='MockPlay')
        self.mock_play._attributes = []