Modified Timing service to be thread-safe

The Timing service now records event information per stream and them does a reduction at end job. The service also uses a per thread stack to record module start times to properly handle unscheduled execution and task spawning cases where a module is called on the same thread as another running (but paused) module.