Don't on empty MVars in disconnect.
Clean up if an exception is thrown while connecting.
Make sure the handler is removed in «awaitMsg».
Mask «disconnect» against async exceptions.
Use «tryTakeMvar» in «onReconnect».