Multithreaded JobReport

Modify the JobReport service so that it will work properly
with the multithreaded Framework. Locking and synchronization
code was only added where necessary. Parts of it will
already be synchronized by the new Framework (it took
some careful manual review to determine that). A mutex
is used to lock where writes to the output file could
occur concurrently. Some internal data structures were
split into separate structures for the primary source,
secondary file source, and the secondary (mixing) source
to prevent data races. Some other functions were modified
to minimize the parts of the data structures that are
accessed.Some unused code was deleted. Some obscure bugs
related to the secondary source were fixed. Unit tests
updated.