Modify main run loop to be inline with thread pool executor paradigms (#121)
Modify main run loop to be inline with thread pool executor paradigms (#121)

This commit brings Dr. Elephant's main producer/consumer run loop in line with standard Java best practices by submitting tasks to a work queue as Runnables making things much more robust.

Previously, if a worker thread's main while loop exited for any reason that thread would live on but would stop processing data forever since the Executor would sit waiting for additional work to be submitted. Essentially, the problem was that things were being done in a standard way and there were 2 queues. We noticed that every once in a while a worker thread's while loop would exit leading to stalled progress over time after they had all done this.

I tested this on CDH 5.3 with MapReduce 2.5.0 and Spark 1.5.2.
linkedin/dr-elephant,linkedin/dr-elephant,linkedin/dr-elephant,linkedin/dr-elephant,linkedin/dr-elephant