Make sure we don't lose more until the first tap

This is really a proof of concept.  Perhaps this should not be the default.
Perhaps we should do it differently.  What it does do is fix race condition
in e.g. IO::Socket::Async.bytes_supply.tap().  And it now makes sense to spec,
implement and test Supply.(classify|categorize).