Implement hierarchical states
We implemented compound states. Compound states allow to prevent state explosion and to scope nested states.
State nodes now have a .Matches(parentStateValue ...StateType)
method to get whether or not the state matches the parent state given as parameter.