~emersion/soju

Add irc to ALPN protocols

The new ALPN token has been approved [1]. We can start using it now.

[1]: https://mailarchive.ietf.org/arch/msg/tls-reg-review/i8YyT82XUtEgR-oXMG3sbyWYT8E/
if true return true else return false

Trivial improvement
Use sendTargetBacklog when re-attaching a channel

No need to attempt to send backlog for all targets in the network.
We're only interested in a single channel.
Introduce downstreamConn.sendTargetBacklog
Rename network.history to network.delivered

"History" is over-loaded with e.g. CHATHISTORY support.
Rename sendNetworkHistory to sendNetworkBacklog

"History" is a little bit over-loaded with CHATHISTORY support.
Add support for graceful shutdown

Closes: https://todo.sr.ht/~emersion/soju/45
Request invite-notify to upstreams

... and do not forward INVITEs to downstreams that do not support the
capability.

The downstream capability can be permanent because there is no way for a
client to get the list of people invited to a channel, thus no state can
be corrupted.
Forward ISUPPORT NETWORK token
Send RPL_ISUPPORT CHATHISTORY token
Update dependencies

In particular, go-irc v3.1.4 should fix empty IRC message handling.
Don't forward batch tags

We don't want to have the batch tag when calling uc.produce, otherwise
downstream will end up with junk batch ids.
Add in-memory message store

Uses an in-memory ring buffer.

Closes: https://todo.sr.ht/~emersion/soju/96
Make chat history operations optional in messageStore

Some stores may want not to implement chat history operations.
Add store-agnostic message ID format

Allow to query the network ID and entity from the message ID regardless
of the underlying store used.
Turn messageStore into an interface

This allows for other implementations that aren't based on a filesystem.
Improve dc.authenticate()'s error messages
Advertise all caps, CAP DEL them on registration

... so that the JOIN/history batch takes into account all capabilities.
Without this commit for example, enabling multi-prefix after the batch
makes the client send NAMES requests for all channels, which generate
needless traffic.
service: Introduce `channel update`

This adds the `channel update` service command, which is used to set the
auto-detach, auto-reattach, and message relaying settings of a channel.

Of note is that currently the parser parses `#` as a comment, which
means any `channel update #foo ...` will actually need to be escaped to
`channel update "#foo" ...`
Add customizable auto-detaching, auto-reattaching, relaying.

This uses the fields added previously to the Channel struct to implement
the actual detaching/reattaching/relaying logic.

The `FilterDefault` values of the messages filters are currently
hardcoded.

The values of the message filters are not currently user-settable.

This introduces a new user event, eventChannelDetach, which stores an
upstreamConn (which might become invalid at the time of processing), and
a channel name, used for auto-detaching. Every time the channel detach
timer is refreshed (by receveing a message, etc.), a new timer is
created on the upstreamChannel, which will dispatch this event after the
duration (and discards the previous timer, if any).
Next