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