Fix issue 179

This PR adds two major changes the way states are handled in order to fix #179:

- An explicit `fsm.Error` exception must be raised by the device author in order to put the state into an error mode.
- An error state can be recovered by calling `.reset()` on it, which will set the state back to the default one. However, it is probably not a good idea, to let the user be able to do it.