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.
Fix removeKeyListener to remove only the one client-key pair

Instead of all listeners to the key.

Also rename key listener disconnect to remove to match add.
Don't keep KeyValueClientListener with no clients
Merge pull request #105 from sbt/wip/havocp-unlisten

add Unlisten requests matching all Listen requests