Revamped "disconnect" logic.

I suspect it is easy to confuse the connection plugin with my janky
async connecton stuff.  So I made it so some commands wait until the
promise is done before advancing the UI.