### Summary

Hello!

Since ansible-core 2.15 and later (I think since the changes introduced by #79558), it seems that, when multiple handlers of a same `listen` group are notified by another handler, only the first one in the group will be run.

From what I understand, when Ansible handles a `notify` when it is already iterating handlers, it will only consider the first handler that matches the notification, but will not iterate through all the matching handlers. I believe the `break` in `lib/ansible/plugins/strategy/__init__.py` (line 669) should only apply when when Ansible is not already iterating handlers (i.e., in the `else` branch):
https://github.com/ansible/ansible/blob/6ebefaceb6cd0d4961776a94d63a71fc1fc28bc0/lib/ansible/plugins/strategy/__init__.py#L659-L669

I think there seems to be a simple fix to that, which I'm planning to submit as a PR.

Thank you! :)

snip

### Issue Type

Bug Report

### Component Name

handlers

### Ansible Version

```console
$ ansible --version
ansible [core 2.16.0]
  config file = None
  configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.11/site-packages/ansible
  ansible collection location = /home/user/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.11.6 (main, Nov 14 2023, 09:36:21) [GCC 13.2.1 20230801] (/usr/bin/python)
  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
EDITOR(env: EDITOR) = /usr/bin/vim
```


### OS / Environment

Arch Linux, with the following Ansible-related packages :
- ansible 9.0.1-1
- ansible-core 2.16.0-1

### Steps to Reproduce

<!--- Paste example playbooks or commands between quotes below -->
```yaml (paste below)
---
- name: test listen-based handlers with recursive notifications
  hosts: localhost
  gather_facts: false

  tasks:
    - name: notify handler 1
      command: echo
      changed_when: true
      notify: handler 1

  handlers:
    - name: handler 1
      debug:
        msg: handler 1
      changed_when: true
      notify: handler_2

    - name: handler 2a
      debug:
        msg: handler 2a
      listen: handler_2

    - name: handler 2b
      debug:
        msg: handler 2b
      listen: handler_2
```

### Expected Results

All handlers should be run, especially both handlers listening on the `handler_2` notification (i.e., `handler 2a` and `handler 2b`):
```
PLAY [test listen-based handlers with recursive notifications] **************************************************************************************

TASK [notify handler 1] *****************************************************************************************************************************
task path: /tmp/ansible/test.yml:7
Notification for handler handler 1 has been saved.
changed: [localhost] => {"changed": true, "cmd": ["echo"], "delta": "0:00:00.004205", "end": "2023-12-06 10:57:16.556224", "msg": "", "rc": 0, "start": "2023-12-06 10:57:16.552019", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
NOTIFIED HANDLER handler 1 for localhost

RUNNING HANDLER [handler 1] *************************************************************************************************************************
task path: /tmp/ansible/test.yml:13
NOTIFIED HANDLER handler 2a for localhost
NOTIFIED HANDLER handler 2b for localhost
changed: [localhost] => {
    "msg": "handler 1"
}

RUNNING HANDLER [handler 2a] ************************************************************************************************************************
task path: /tmp/ansible/test.yml:19
ok: [localhost] => {
    "msg": "handler 2a"
}

RUNNING HANDLER [handler 2b] ************************************************************************************************************************
task path: /tmp/ansible/test.yml:24
ok: [localhost] => {
    "msg": "handler 2b"
}

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

### Actual Results

```console
PLAY [test listen-based handlers with recursive notifications] ***********************************************************

TASK [notify handler 1] **************************************************************************************************
task path: /tmp/ansible/test.yml:7
Notification for handler handler 1 has been saved.
changed: [localhost] => {"changed": true, "cmd": ["echo"], "delta": "0:00:00.003800", "end": "2023-12-06 10:56:26.513556", "msg": "", "rc": 0, "start": "2023-12-06 10:56:26.509756", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
NOTIFIED HANDLER handler 1 for localhost

RUNNING HANDLER [handler 1] **********************************************************************************************
task path: /tmp/ansible/test.yml:13
NOTIFIED HANDLER handler 2a for localhost
changed: [localhost] => {
    "msg": "handler 1"
}

RUNNING HANDLER [handler 2a] *********************************************************************************************
task path: /tmp/ansible/test.yml:19
ok: [localhost] => {
    "msg": "handler 2a"
}

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


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
'''
    This is the base class for strategy plugins, which contains some common
    code useful to all strategies like running handlers, cleanup actions, etc.
    '''
    
    
    
    ALLOW_BASE_THROTTLING = True
    def __init__(self, tqm):