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.
Yes and no. Even though it is shared the destructor will be called if the ref count reaches 0. However you are right that at the moment it will leak. This is because the ref count will never reach 0 after the call to `connect` since `connect` starts the `receive_loop` which has a reference so will increase the ref count. I am not sure at the moment what's the best way to fix this. It is a good catch though - thanks for pointing this out. I added this to the list of the issues because it needs more thought. I think from the user perspective it can be fixed by ensuring we stop the connection in the `connection` dtor (note: not the `connection_impl` - `connection_impl` is captured in the receive loop as well so if the loop is not stopped it won't `connection_impl` won't be destroyed for the same reason the transport was not destroyed).