Started splitting tasking code away from thread managment primitives.
Fixed race condition in Semaphore.
Repalced Semaphore::Post with core::Event. Added BaseSemaphore and EventQueueSemaphore types. Made TaskProcessor a Task so TaskProcessors can be nested inside other TaskProcessors. These changes help facilitate a main thread TaskProcessor.