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.
The websocket_transport doesn't have the destructor called anymore because it is shared now and so when the scope exits it just decrements the ref counter. So the websocket_transport will stay alive forever until the program actually exits.