Restructure Halt/Disconnect Structure

This patch:

- moves disconnecting event handlers up a level, so that adaptors/drivers don't have to worry about it.
- moves logging of the disconnect up a level, so that adaptors/drivers don't worry about it
- introduces a new way for adaptors/drivers to indicate they're finished disconnecting

Now, the Adaptor/Driver #disconnect/#halt method is passed a callback. This callback should be triggered when the Adaptor/Driver is done disconnecting or halting..