WIP rewrite of priority handling and performance optimization

* Stop using threads for the workers. Ruby threads are mostly useless due to the GIL
see http://stackoverflow.com/questions/56087/does-ruby-have-real-multithreading

* Override getting messages from the storage to make it fetch only one message per step
* Also skip n messages where n is the current worker's fork number. This depends on using supervisor
* Run a worker dedicated for scheduler role in the first fork only. This depends on using supervisor
and breaks things for running standalone. WIP
* Run the Viewer in the first fork to share the storage instance.
* Disable skipping due to collisions. We fetch only one message per step from a workers's slice of the queue.
* Join the viewer's stopped thread on shutdown so we don't hang.