Ensure that we resume socket reading in all edge cases
Specifically in all the cases where handle_other might have changed
the connection_state.

This is most straightforward and obvious to guarantee by always
invoking recvloop after handle_other, unless we are stopping.

This does expose an inconsistency in the various non-throw/exit
termination cases: two of them were returning State, the other
ok. Let's go with the latter; it's easiest.

We also take the opportunity to eliminate 'Deb' from the handle_other
signature. This is only needed in the {system, ...} message case,
which we now handle specially.
Merge bug25457