Shameless(negotiate)Plug - plugging in sending negotiate request when starting a connection

Bonus changes:
- renaming some variables for consistency
- removing trailing whitespaces
IntroducingErrors - adding trace_level::errors value

Adding an additional class of log message for errors. Changing current log messages to errors where applicable. Qualifying log entries with the class the message belongs to.
Robin->Hood - enforcing the websocket_transport to be used as a pointer

I prototyped the 'connect' request and it seems that making the `receive_loop` a member of the `websocket_transport` would make it easier to invoke a callback when a message is received. If the mechanism is implemented in the `transport` type we could call it from each transport instead of implementing it in each transport. Because the `receive_loop` schedules itself in a task we need to pass `this` a `shared_ptr` which results in deriving the class from `std::enable_shared_from_this` which results in converting all the usages to `shared_ptr`'s to prevent from incorrect usages resulting in undefined behavior.
DontCallUsWe'llCallYou - adding a callback for received messages
NullNullableProperty - fixing a crash caused by a null KeepAliveTimeout