##### SUMMARY
If `callback_whitelist` contains a FQCN that does not exist, Ansible will crash:
```
ERROR! Unexpected Exception, this is probably a bug: 'NoneType' object has no attribute 'set_options'
the full traceback was:

Traceback (most recent call last):
  File "ansible/bin/ansible-playbook", line 123, in <module>
    exit_code = cli.run()
  File "ansible/lib/ansible/cli/playbook.py", line 127, in run
    results = pbex.run()
  File "ansible/lib/ansible/executor/playbook_executor.py", line 99, in run
    self._tqm.load_callbacks()
  File "ansible/lib/ansible/executor/task_queue_manager.py", line 165, in load_callbacks
    callback_obj.set_options()
AttributeError: 'NoneType' object has no attribute 'set_options'
```
This happens since #66128 (unsurprisingly). This is easy to fix by changing line 165 to
```
            if callback_obj is not None:
                callback_obj.set_options()
```
but this only fixes the symptom (crash), not the cause (no handling when callback not found).

I guess a better behavior would be to:
```
            if callback_obj is None:
                raise AnsibleError("Cannot find callback: %s" % callback_plugin_name)
```
or at least print a warning. Since I'm not sure what the correct behavior is, I'm creating this issue.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
lib/ansible/executor/task_queue_manager.py

##### ANSIBLE VERSION
```paste below
2.9
devel
```

from ansible.module_utils._text import to_text, to_native
from ansible.playbook.block import Block
from ansible.playbook.play_context import PlayContext
from ansible.plugins.loader import callback_loader, strategy_loader, module_loader
from ansible.plugins.callback import CallbackBase
from ansible.template import Templar
from ansible.utils.collection_loader import AnsibleCollectionRef
from ansible.utils.helpers import pct_to_int
from ansible.vars.hostvars import HostVars
from ansible.vars.reserved import warn_if_reserved
from ansible.utils.display import Display
from ansible.utils.multiprocessing import context as multiprocessing_context
__all__ = ['TaskQueueManager']
display = Display()
class TaskQueueManager:
    '''
    This class handles the multiprocessing requirements of Ansible by
    creating a pool of worker forks, a result handler fork, and a
    manager object with shared datastructures/queues for coordinating
    work between all processes.
    The queue manager is responsible for loading the play strategy plugin,
    which dispatches the Play's tasks to hosts.
    '''
    RUN_OK = 0
    RUN_ERROR = 1
    RUN_FAILED_HOSTS = 2
    RUN_UNREACHABLE_HOSTS = 4
    RUN_FAILED_BREAK_PLAY = 8
    RUN_UNKNOWN_ERROR = 255
    def __init__(self, inventory, variable_manager, loader, passwords, stdout_callback=None, run_additional_callbacks=True, run_tree=False, forks=None):