Fix warnings about unhandled requests

 - error on the two server-to-client requests
 - error on RegisterClientRequest after initial setup
 - make KeyLookupResponse extends Response not Request
 - delete for-now-unused KeyListRequest, we can always put it back
Remove redundant ID from completions protocol
Merge pull request #106 from sbt/wip/havocp-unhandled-requests

Fix warnings about unhandled requests
Merge pull request #107 from sbt/wip/havocp-completions-id

Remove redundant ID from completions protocol
CanLoadSimpleProject: use trySuccess not success as watch build callback

Since this callback can be run more than once, resulting in ugly backtrace
in the test logs.
Fix task ID assignment in several ways

Use Task[_] not ScopedKey. ScopedKey had multiple problems:
 - multiple tasks with same key could be in an execution
 - some tasks don't have a key

Create an ID for the registered task only, in registered(),
not for its dependencies. Previous code was assuming registered
would be called only for the destination task not every task.

Add some sanity-checks (throw exceptions if we register a duplicate
ID or try to run a task with no ID).
Make the ScopedKey in TaskStarted/TaskFinished optional

Because there are tasks with no key.
Adding a note about concurrency concerns.
Merge pull request #96 from sbt/wip/havocp-fix-task-ids

Fix task ID assignment
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