add Unlisten requests matching all Listen requests

These do not keep a count, so if a client tried to listen
from two unrelated pieces of code it would be unable
to cleanly unlisten. This is OK in our current design because
the SbtClient API keeps a client-side count and only listens
or unlistens one time on the transitions between 0 and 1 listener.
It does require client APIs to be smart about this, which
is probably fine.