Instantiate TxState lazily

o Replace TxState.Factory with TxState.Holder
o Make TxState clients check if state.hasTxStateWithChanges() to avoid object instantiation