Add event creation library and implement in scheduler.

If it weren't for testing:
  - EventRecorder would not be needed
  - StartReporting would have just one string argument.
  - GetEvents would not need to be public
  - StartLogging would not need to take a function as an argument (and might not be needed at all).

I'd much rather have a clean public interface than clean tests.