Now uses weak_ptr inside the AsyncDispatch handler

As opposed to shared_ptr. This is so that the handler
won't keep Transport from being destroyed.

Though, keeping the Trasport from being destroyed may be
what was intended, it will need to be done in different
way as this was blocking the asio::io_service::run from ever
finishing.