qml: provide common FSM implementation
this MR is the continuity of !3735 (merged), it aim to factorize the implementation used in this MR and provide support for Hierachical State Machines, as it's used in the PlaylistVisibility state machine
why not qt implementation:
This avoid requiring an extra dependency
QtQml.StateMachine implementation is quite buggy: no being able to pass complex types through guard and actions is really limiting.
Qt SCXML implementation requires another language for declaring FSM and would be tedious to integrate with meson.
what's missing:
- no timeout transition: right now you can start/stop a Timer instance in your enter/exit callbacks, it's more verbose but it felt unnecessary to add a special implementation for it.
This MR also introduce some unit tests for QML, at the moment nothing is registered in the engine, so it's a bit limited regarding what we can test.