Fix for PreCommit.

Added a new test, Validation, in PreCommitTests. It introduced a pre-commit
check which was triggered by commutes, and revealed a bug in pre-commit
implementation. Such pre-commits will run inside the same context with
commutes. Since this makes it possible for commutes to overlap with the
main transaction inadvertently (i.e. a pre-commit unexpectedly enlisted
something new into commutedItems), this will not cause an exception any
more, but will gracefully fall back - for any overlapping field, main transaction
has advantage, and such a field will have to pass CanCommit check with the main
transaction's read stamp.