This should substantially reduce memory allocations and memory copies.
It also means that PostgreSQL messages are always entirely buffered in memory
before processing begins. This simplifies the message processing code.
In particular, Conn.WaitForNotification is dramatically simplified by this
change.
Previous commits had a race condition due to not waiting for the PostgreSQL
server to close the cancel query connection. This made it possible for the
cancel request to impact a subsequent query on the same connection. This
commit sets a flag that a cancel request was made and blocks until the
PostgreSQL server closes the cancel connection.