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.
As stated, I think we may want a separate "ExecutionListener" architecture vs. "LogListener" events.

The EventSynch, as it exists, can buffer "Log" events and feed to listeners when they connect from the boot-up.  I think the ExecutionListener pieces needs to be fragmented, so we don't have too much code combined.