Add integration tests for task result watching
Fix race in integration test for CompilationFailure

The code got confused if we happened to get an ExecutionSuccess
or ExecutionFailure from earlier tests.
Remove a bogus duplicate ReceivedResponse

SbtClientHandler was automatically ack'ing all requests,
but this meant requests always got two replies. Some requests
send something more details than ReceivedResponse so we don't
want to auto-ack everything and hide the later response.
Clean up SimpleClient response handling

We were tracking pending requests in many different
Map[serial,promise] and trying to pick the right
Map based on the response type. This missed all
ErrorResponse and ReceivedResponse, and it also
kept us from getting responses to certain requests
such as SendSyntheticValueChanged which could have
more than one possible response type.

Doing this correctly also means we need less code, so yay!
CanLoadSimpleProject: change a success to trySuccess due to logging problem
Send an error to value watchers on nonexistent key

This avoids the need to first check whether the key
exists and then watch it; you can just establish a watch,
if you want to treat errors and nonexistence the same way.
SimpleClient: Ensure all responses are logged if not handled

This leads to a naughty printing to stderr from a library,
but since it isn't supposed to ever happen, we'll live
with it.
Merge pull request #222 from sbt/wip/havocp-task-result

Send watch notification when a task doesn't exist