Add events that can be triggered on by transitions.  This means we can have programatic control of the state machine whilst honouring the defined transitions.  The setState call gives us control but it does not honour transitions.

Of course, events are entirely optional if you do not want to use them.

Events also have an optional call back that runs when an event is acted on.