Standardize the internal interface for receiving messages

Previously all callers of recv1 had to remember to explicitly ignore
asynchronous messages, which was quite tedious and error-prone (see
for example #149).  Now recv1 ignores all asynchronous messages (with
the exception of asynchronous ErrorResponse messages) transparently.
If the caller wants to avoid that behaviour, it can either call recv
(which the authentication procedure does) or recvMessage directly.

The only behavioural change should be the use of recv1 in stmt.Close;
the previous coding could have returned an error there for no reason
if an asynchronous message was in the buffer but had not been
processed yet.