start
Starts the state machine.
This method is idempotent - calling it multiple times has no effect if the machine is already running. Starting the machine enables event processing and observer notifications.
This method is thread-safe and can be called from any thread, including coroutine contexts.