Introducing sanitizer callbacks in transport layer

Currently, there is no sanitization of the incoming data. A malicious node or a bug in our side could end up with a message that crashes all connecting nodes. I believe issues #659 and #655 exist because of accepting unprepared data.

Please note that this PR does not sanitize the messages in the transport layer but it does the first step by introducing sanitizer callbacks that need filling. A sanitizer callback will be executed before the actual callback and its purpose is to make sure that the incoming messages are well-formatted (for example, the right keys exist, it is fixed-length, it contains valid data). Every callback should strictly come with a sanitizer.
The log message doesn't provide any extra info other than signaling that the validator was called. Since the validators will be called often, I suggest storing the message as `self.log.debug(...)` so as not to pollute the logs too much.