invalid initial states raise InvalidState, not InvalidMachine
check transition validity before defining transition methods