Sync execution queue AND active execution for new clients

This PR includes #161 and #162 so merging those first will shrink this one.

This moves eventListeners out of ServerState because we need to atomically modify the listener list and send the sync-up events, which wasn't possible the way the code was structured before.

The PR also has an overhaul of how we use Format, changing it to Writes, sometimes putting an upper bound on writeable types (for e.g. the logSink which now can only accept LogEvent), and actually using the passed-in Writes instead of a hardcoded one.

The main user-visible improvement here is that now when clients connect they are brought up to speed.

Welcome to the land of existentials and type-boundaries.   You could also cast to "Any" and be ok.

Option #2 (if scalac lets you):

```scala
def sendWithWrites[T](client: sbtClient, withwrite: EventWithWrites[T]): Unit = {
   client.send(withWrites.event)(withWrites.writes)
}
```

Drops the existential in the method definition (Scala will infer it if needed).