added IExecutionState - hold a 'threads' state

changes the way transitions are associated to states.
transitions are now added to states by providing an event to bind them
to.
a state may have any number of transitions registered to a  given event.
at runtime only one of these transitions may be accepted by the guards
or an error will be raised.