Add execution ID to TaskStarted and TaskFinished events
Factor out get-key-from-task boilerplate in ServerExecuteProgress
Add a per-task-execution ID to TaskStarted and TaskFinished

This allows us to send just one integer with all other
events related to the task - log events might be the
most numerous - but all events could theoretically use
this integer as a compressed way to identify their origin
task instance.
Add a comment about why taskIds map isn't synchronized

Just to tell future us what we were thinking, should
we wonder.
Move the work queue event stub so ServerState will be available

We want state.eventListeners to emit work queue changes, so
let's only emit the changes when we get the state because
we are about to execute. This will also have the effect
of compressing the change events if we want to.

We do not compress adds/removes, because we don't want to
execute some work without letting clients see it enqueued.
Clean up backtrace on connector close in SbtClientTest

"runOneThingExecutor" would get two things, one was the
onConnect and the other was an error on close. It just
printed out an exception on close and the test was
still fine, but better not to print errors that are expected.
Emit ExecutionWaiting and ExecutionStarting events

These allow monitoring the execution queue; you get
Waiting on enqueue and Starting when the execution
is unqueued and started.
Make SbtClient.requestExecution return the execution ID

This was a simple oversight before; it's needed to be able to
accurately track what's going on.
SimpleSbtTerminal: track execution by ID not command name

It was broken to track by name since there might be multiple
executions with same name, or initiated by other clients, etc.
Remove "command" from ExecutionDone, ExecutionFailure

This was redundant information since you get the command
when we create the execution (ExecutionWaiting) and we don't
need to keep resending it.

The command also encouraged people to do it wrong (by correlating
commands instead of IDs).
Fix thread safety issue in CanUseUiInteractionPlugin test

This did fail for me once, so it was broken in practice in addition
to in theory.
Rename ExecutionDone to ExecutionSuccess

This way ExecutionSuccess / ExecutionFailure match scala.util.Try

Also it's clearer that you only get one of the two events, someone
could have believed that they would ALWAYS get ExecutionDone.
add @volatile to taskIds in ServerExecuteProgress

to be sure the other threads get the value.
TaskProgressShim: clean up duplicate code
TaskProgressShim: use += for conciseness
TaskProgressShim: make nextTaskId per-instance not global

This way it doesn't have to be atomic
SimpleSbtTerminal: add TODO about broken race adding handler too late

To get events for a request, handlers must always be added before
making the request.
Merge pull request #84 from sbt/wip/havocp-track-execution

Improvements to support tracking execution