Don't reset the cached ProtoRpcControllers in DistributedState. This will prevent us from losing messages with the early 2PC prepare optimization.
Lots of refactoring in the execution stuff to clean up VoltProcedure and friends. We also changed DistributedState so that we always initialize the LocalPrepareCallback so that we don't flip out when we get the finished partition responses asychronously.
More Friday night refactoring fun:
(1) We removed the need to provide VoltProcedure.init() a bunch of input parameters that it can get from the PartitionExecutor.
(2) Removed the need to store an AbstractTransaction and a LocalTransaction in VoltProcedure.
(3) HStoreCoordinator.transactionPrepare() checks the LocalPrepareCallback to see which partitions it has received 2PC prepare responses already.
(4) Removed an unnecessary extra stack level from PartitionExecutor.processInternalTxnMessage(). I'm sure this is a minor speedup