This fixes #43.  The issue was that when the park was being called, the thread had already been interrupted, thus making the park return immediately.  I went ahead and improved a few other places where we can be handling interrupted exceptions a lot better.
Fix for possibly leaking a submitted job due to the recent fix for #42.  By letting the interrupted worker get back into the pool, it could have recieved a job right before it killed itself.  This also fixes a very rare condition that could cause a duplicate decrement of the current pool size (thus making it think that the pool is smaller than it actually is)
This further improves the fix for #43.  Previously if the worker had an interrupted task, we would then kill the worker and wait to create a new task.  With this implementation, we will only kill the worker if the thread pool is shutting down.  Otherwise we clear the interrupt, and continue normally.  I also added unit tests around this behavior.
Fix for checkstyle warning
Further improved the thread thread pools usage of interrupts.  If someone sends an interrupt to an idle worker thread, we will allow that thread to die (regardless if they have called shutdown or not).  We know that the interrupted status was cleared after a task ran, so this means that a direct interrupt was sent while the worker was idle (so it seems to make sense to honor that request).
Easier to check running here, instead of Thread.isAlive()
Merge branch 'master' into thread_profiler