Read-Lock and unlock the connection before passing it into callbacks.
This should ensure we don't try to access the connection after it was
termianted.
Ensure the wrappers lock themselves as well as the dependent objects
when shutting down. Lock in shutdown rather than the destructor because
that's where we typically stop deallocating context etc.
Attempt to discover and count bugs where we try to read from a
connection after it has been shut down and removed from the queue.