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.
This feels wrong.  Do you want buffering on joined SbtClient or just on the current implementation for the one which has a physical socket on the other end?