Clean up FiniteStateMachine interface to use the Transitions type param
rather than raw enums