Message framework and Scheduler
A set of modular template classes that can be mixed and matched together to provide message routing, message buses, finite state machines and cooperative schedulers.
All of the message framework classes are based on etl::imessage_router, allowing combinations of Router/Bus/FSM.
The framework uses CRTP to eliminate the need for most virtual functions and enable direct calls to handler functions.
Also added 'generators' for several classes to allow the maximum number of handlers or types to be set according to project requirements.