re-activated state.exit and state.enter callbacks; switched running guards to let event guards run before transition guards (step 3)
fire guards before running state callbacks (test run) (step 4)
added some guard tests (step 5)
final cut (step 6)