essessey v0.6.0 — retention and fan-out

v0.5.0 gave clients a resume point via Event.ID; this gives a server what it
needs to honour one.

MultiSink fans one Emit to several sinks, so retention is just another
destination rather than a wrapper type. It keeps going when one sink fails and
returns the joined error -- a broken buffer must not cost the client its stream.

EventStore retains recent events per stream and reports whether a resume point is
KNOWN instead of guessing. That matters: replaying from the start duplicates what
the client already saw, replaying from now silently drops the gap, and only the
caller can decide which is acceptable.

InMemoryEventStore is the bounded per-stream default -- ring buffer for order and
eviction, id index for lookup.

Replay reuses SliceSource and the ordinary Sink, so there is no second code path
to drift from live.