Add EventSource to the public API

Also fixes EventSource to not start sending output the moment we construct it but wait until we start sending data.

cc @PVince81 @DeepDiver1975 @MorrisJobke 
I'd almost even prefer calling it `createEventSource()`, because when seeing `getEventSource()` used somewhere it is not clear that we are getting new instance instead of a possibly cached one.

If you compare with other services above they all seem to have singletons.