Fix prepared statement leak

Fix for #158.

Note that when command's Dispose() is called from a finalizer, it isn't possible to send the deallocation command to the backend (socket my be busy), or to block until the socket is free. So I added a queue of "PendingActions" to be processed before the next query is performed.