An FSM is used to represent an instance of a finite state machine which has a
transition function represented by an instance of StateEngine. An instance of
an FSM may be created either by calling StateEngine.makeFSM( startState ) on
a state engine, or by extending FSMImpl and using a constructor. Using
FSMImpl as a base class is convenient if additional state is associated with
the FSM beyond that encoded by the current state. This is especially
convenient if an action needs some additional information. For example,
counters are best handled by special actions rather than encoding a bounded
counter in a state machine. It is also possible to create a class that
implements the FSM interface by delegating to an FSM instance created by
StateEngine.makeFSM.