Each reconnection would add redundant callbacks for CAP and the
SASL numerics. This would result in `AUTHENTICATE PLAIN` being sent
multiple times (once for each callback), which would confuse the server.
On some servers SASL auth would fail because we didn't fully comply with
the spec. Multiple caps can be returned in a `CAP ACK`, and sometimes
servers add a trailing space. Parse these responses more correctly.
Where additional caps were requested using `RequestCaps`, SASL would
send an `AUTHENTICATE` command for each one which servers don't like.
Check that we're responding to the correct `CAP ACK`.
This adds the ability to negotiate arbitrary IRCv3 capabilities on
connection. Capabilities to be requested can be set in `irc.RequestCaps`,
and after registration the negotiated capabilities can be seen in
`irc.AcknowledgedCaps`.