Throw Exception if OpaqueValue's txId is ahead of batchTxId

Fix for #627

There should never be a case where the state's txId is ahead of the current transaction. Yet it's actually easy to do in practice -- writing into an existing table with a new flow, say -- and can have catastrophic results.