MultiScopeGuard

Implemented a thread safe scope guard which may be attached to multiple scopes.

This will be useful for executing an action asynchronously after certain other asynchronous tasks have completed.  The scope guard may simply be attached to the functor which represents the asynchronous tasks to precede the follow up task, and once they've all completed the follow up task will automatically run.
Thread Pool Fixes

Fixed two bugs in the ThreadPool class:

1. Undefined behaviour occurred when an asynchronous task which returned a value threw, since the memory allocated for its return value was never initialized, but the cleanup function would run the destructor anyway.

2. Functors for tasks were not cleaned up once the task-in-question had completed, but rather before the next task on that worker thread was executed.  This did not cause any sort of leak, but was causing MultiScopeGuards attached to functors not to fire at the proper time.
Tick-Based Scheduling

The TimeModule class now provides facilities for scheduling tasks based on ticks.  A task may be run every tick, or a certain number of ticks after it is scheduled.  Moreover these tasks may be fully asynchronous (the tick loop continues whether they finish or not) or only partially asynchronous (they run asynchronously, leveraging the full power of threading and the thread pool, but the next tick will not occur until they finish).

Accordingly the TimeModule class now includes facilities for specifying a tolerance, beyond which a tick is considered "too long" and will cause a warning to be logged.