restructure completion time maintenance classes and add a lot more tests to ensure their correctness
introduce multiple local completion time writers to a single driver process, and provide a different writer to each executor/thread pool - this fixes a known bug where GCT would block due to a race condition between executors
minor performance optimizations to several generators and Db, to reduce object creation (--> reduce GC)
add max() to Time and Duration
(temporarily) change AddFriendship events from WINDOWED scheduling mode to ASYNC scheduling mode, to simplify testing
add testutils test package
add ThreadPoolLoadGenerator class that spools up a number of spinning threads, to generate fake load during testing <-- has been useful for exposing a number of race conditions already
add ThreadPoolLoadGenerator class, to generate load by spooling up a number of spinning threads <-- has been useful for finding a number of race conditions and other timing related bugs, so far