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
DontBuyBreweryToDrinkAPint - removing reference to connection from transports

The only reason why transports were coupled to the `connection_impl` was because they needed to be able to log things. However this would create a circular reference between a transport and `connection_impl` (in the future) which would lead to memory leaks. One of the ways to avoid the leak would be to use a `weak_ptr<connection_impl>` but since we only want to get a logger it is just better to pass the logger instead of the connection. This not only removes the situation leading to memory leaks but also makes testing easier. If we end up needing a reference to `connection_impl` in the future we will revisit.
FeelingConnected - adding support for connect request.