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

self._inventory = inventory
        self._variable_manager = variable_manager
        self._loader = loader
        self._stats = AggregateStats()
        self.passwords = passwords
        self._stdout_callback = stdout_callback
        self._run_additional_callbacks = run_additional_callbacks
        self._run_tree = run_tree
        self._forks = forks or 5
        self._callbacks_loaded = False
        self._callback_plugins = []
        self._start_at_done = False
        
        if context.CLIARGS.get('module_path', False):
            for path in context.CLIARGS['module_path']:
                if path:
                    module_loader.add_directory(path)
        
        self._terminated = False
        
        self._failed_hosts = dict()
        self._unreachable_hosts = dict()
        try:
            self._final_q = multiprocessing_context.Queue()
        except OSError as e:
            raise AnsibleError("Unable to use multiprocessing, this is normally caused by lack of access to /dev/shm: %s" % to_native(e))
        
        
        self._connection_lockfile = tempfile.TemporaryFile()
    def _initialize_processes(self, num):