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.
having sbtclient extend event sink isn't actually needed/used in this patch IIRC. SbtEventSink is just an interface so it doesn't add buffering, it's just a thing you can send events to.

if we split up event sink into a couple flavors would probably drop this