- FIXED: Removed equals() and hashCode() implementations from
AbstractTransition to avoid issue where multiple transitions with the
same head/tail couldn't be added to a graph.  The implementations didn't
consider that an API user might have multiple transitions to/from the
same state(s), but with different valid inputs and onTransition()
implementations.  Duh!
- Moved states and transitions into their own packages
- Refactored StateMachine to add instances of new
StateMachineEventListener interface and call its methods where
appropriate.