Define a common `Message` interface.

Ensure all CSCN message structures satisfy `Message`. Move
`max{ServiceLength, PayloadSize}` into the common encoding package.

Change the `DeviceList` and `DeviceChangeRequest` structures to hold
`encoding.Device` structures, rather than pointers to them.

Extract the `ImplementsReaderWriter` checker into a `test` package.
Implement the Service API message types.
CSCN API Device/Message ID ordering changes.
Add `Request, Reply()` to the `Message` interface.