Send log events earlier, so we get events during sbt boot

The goal here is to get log events if sbt fails to start up
due to missing plugins, syntax errors in the build config,
and so on.

This commit introduces a refactor where ServerEngine can
go through a ReadOnlyServerEngine-mediated event sink
rather than directly using eventListeners. For now it
only uses the mediated event sink for log events, but
in the future as noted in TODO I want to use it for all
events and solve the problem of bringing new clients up
to speed on active execution state.
Yeah, we may want to denote this as LogEvents, and start the bifurcation of event listeners into:

* ExecutionEngine events
* Log events
* Task/Setting/Build state events.