break out the Committing state into WaitingToSendBatch and WaitingToReceiveBatchProcessed, dont send spurious empty batches