Split a control_event module out of control, and make it use control safe logging
Currently, control events can log messages through the standard logging module, which can send those logs as control events. This means that some configurations, future code, or errors might cause an infinite loop.
We should split off a control_event or control_log_event module, and make it use control safe logging. All it's dependencies should also use control safe or signal safe logging.
I think we need to make this change after catalyst's control refactor, to avoid merge conflicts.