Strengthened testing around client ack behaviour

Added another test for the client ack behaviour. This time asserting
that the resends are stopped when a client ack is sent.

There is still a significant amount of thought required around the
testing of these delicate network interactions.
Added unit tests for Message validation

We now have a fairly large number of unit tests. We do not have
sufficient coverage of corner cases. Also the approach is excessively
verbose and repetitive. Thought should be applied to reducing this
burden and improving test case coverage.

Also removed the *Message.WriteCancel() method. Only
*Messasge.WriteCancelFor(*Message) is available now.
Strengthened tests for Message validation

A greater range of partially populated messages are generated and
automatically tested. Testing is still not 100%, but provides
significantly more confidence than previous tests.

The remaining test (of the tests themselves) is how easy they are to
change when the validation around messages changes.