Transitions should have guards

Fixes #32 

The Transition.allowed() method has been refactored into a
TransitionGuard interface that also requires that the state machine
context be provided.  This allows the transition guard to be based off
of the current state machine context.