SmartPimpl - changing m_pImpl from a raw pointer to `std::shared_ptr`
ILogStuff - enabling logging from `connection_impl` and transports

Note that a side effect of this change is that we now will be able to raise events from transports since transports now will have a (smart) pointer to the connection_impl instance.