Remove "suspended state" from the FSM.

Since suspended should be considered as lost, we are just better
considering that this is the same transition. This simplifies a lot
the FSM.

To properly test for edge case, we raise an error during unittests if
a transition is unknown. This forces us to handle some odd transitions
triggered by events repeating several times. For example, the
connection lost event can be triggered several times because we
received it too late and issued an operation.