Message move

Message move ctor / operator= was misbehaving.

This somehow changes the behavior when using `operator>>` and moved message. I believe this behavior is more correct because it correctly move the state and leave the moved-from message in a correct state.
See the commit introducing failing unit test for more detail.

(I realise the ratio test-code:code is big)