Another iteration of the parallel engine

Allows for workers to manage more than one queue
Implemented proper thread sleep/wake behavior for workers
TODO:
  - Gracefully terminate simulation mode when all queues are empty
  - Add options to Driver for parallel mode (currently hardcoded)