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.
My take on this is:

* INFO should be for validating that events are taking place properly, like a chain of callbacks is being executed as expected.

* DEBUG should be for debugging information inside a method, like the values of incoming data or fields.

What do you think?