When engine changing state, the transition is now validated. This
helps to avoid complex and error prone checks in engine._change_state
and make validating code more reusable in different engines.
Change-Id: I2a06823c532926bb3bd034f7252b14bdbbc1fa1d
Implements: bp:transition-control