Upgrade to Hierarchical State Machine

Split Transition and Condition into two separate interfaces/classes.
Split Action off from State.  Change design of State to model the
Hierarchical State Machine example from DDD's book.