Add abstract serializer and deserializer

This PR introduces the abstract serializer and deserializer as well as an initial version of a message.
Yes, of course. But the code is in one block, and that caused me to think that you unrefed the stuff you use in the next lines.

My point is not about how things _work_ but how things _look_. Please reread my comment from above carefully.