Minor refactoring
Ok now this is a wild one... The TransactionQueueManager fires off separate threads for each partition that will each block on their corresponding PartitionLockQueue and wait until the next txn is released. I figured that this was easier than trying to be slick about polling them. This means that the PartitionExecutor only needs to poll its work queue. That's it. That solves our weird split brain problem where we need to poll two queues to find work. #115
Improved logic for TransactionQueueManager's internal pollers so that they don't release txns until the PartitionExecutor is finished with the last txn #115