Simplify `decodeNotification` and `Decoder`.

* Define a `HasType` interface embedded by `Request` and `Reply`.
* `Decoder.Decode()` now returns `(HasType, error)`.
* Remove `Reply.HasRequest()`. `Conn.Receive()` now performs a type
  assertion to determine whether an incoming packet should be treated
  as a reply.
* Remove `Conn.pending{Lock}`, `Conn.removeAllPending()`, and
  `Conn.Messages()`.
* `Conn.messages` => `packets`.
* `Conn.ReadMessage()` => `ReadBatch()`.
* `readMessage()` => `readPacket()`.
* `Conn.decodeUpdate()` now returns `(Update, error)`.