add SingleThreadedOperationHandlerExecutor <- reduces overhead of thread pool, when not needed
add uncompletedOperationHandlerCount() to OperationHandlerExecutor interface <- provides more efficient means of checking/waiting for benchmark to complete
add OperationStreamExecutorPerformanceTest (@Ignore'd) to compare performance of new and old single threaded executors under different configurations
add QueueEventSubmitter and QueueEventFetcher to abstract away differentiation between blocking and non-blocking queues <- much easier to change between now
replace LinkedBlockingQueue with LinkedTransferQueue everywhere that a BlockingQueue is used (micro-benchmark showed it to be noticeably faster)
remove old single threaded execution classes and replace them with new implementations

results from micro-benchmarks comparing OLD & NEW single threaded execution methods:

Spinner [Sleep = 0 ms] (OLD thread OLD executor) 100000 ops in 00:00.063 (m:s.ms): 1575.299306868305 ops/ms
Spinner [Sleep = 0 ms] (OLD thread NEW executor) 100000 ops in 00:00.058 (m:s.ms): 1696.06512890095 ops/ms
Spinner [Sleep = 0 ms] (NEW thread OLD executor) 100000 ops in 00:00.055 (m:s.ms): 1800.1800180018001 ops/ms
Spinner [Sleep = 0 ms] (NEW thread NEW executor) 100000 ops in 00:00.049 (m:s.ms): 2012.477359629704 ops/ms

Spinner [Sleep = 1 ms] (OLD thread OLD executor) 10000 ops in 00:04.506 (m:s.ms): 2.218859417505026 ops/ms
Spinner [Sleep = 1 ms] (OLD thread NEW executor) 10000 ops in 00:00.005 (m:s.ms): 1769.9115044247787 ops/ms
Spinner [Sleep = 1 ms] (NEW thread OLD executor) 10000 ops in 00:00.005 (m:s.ms): 1824.817518248175 ops/ms
Spinner [Sleep = 1 ms] (NEW thread NEW executor) 10000 ops in 00:00.004 (m:s.ms): 2032.5203252032522 ops/ms

Spinner [Sleep = 10 ms] (OLD thread OLD executor) 1000 ops in 00:04.420 (m:s.ms): 0.2262034020991676 ops/ms
Spinner [Sleep = 10 ms] (OLD thread NEW executor) 1000 ops in 00:00.000 (m:s.ms): 1923.076923076923 ops/ms
Spinner [Sleep = 10 ms] (NEW thread OLD executor) 1000 ops in 00:00.000 (m:s.ms): 1369.86301369863 ops/ms
Spinner [Sleep = 10 ms] (NEW thread NEW executor) 1000 ops in 00:00.000 (m:s.ms): 2127.6595744680853 ops/ms
modify how "early spinner sleep duration" is calculated, now Min(configuredSleepDuration, spinnerOffset/2)
replace ConcurrentLinkedQueue (non-blocking) with LinkedTransferQueue (blocking) in completion time service components <-- reduces CPU utilization
change default spinner_sleep_duration from 10ms to 0ms