Shielded<T>.Assign no longer commutable + more.

* Assign no longer commutable, and it performs much better.
Since it is mostly used in a non-commutable way (in many existing
usages it actually comes right after a Read...) this is not an issue.

* Tests had to be changed because, due to Assign changing,
ShieldedSeq<T>.Clear is also not commutable any more. It could
have been changed to use Commute, or maybe even a new method,
CommutableAssign, but I don't see much need for that.

* Shielded<T>.Commute had a bug - it would raise Changed directly,
but it enlisted a commute which calls Modify, and Modify also
raises the Changed event. This meant at least two Changed event
calls, and one from inside a commute context, which is a problem.

* Finally, the SimpleOps tests were changed a little. The additional
repetitions are now done only if the second operation is much faster
than the first one, because due to this difference, the noise in the
measurements of the time of the first one completely dominates, and
results would often be negative without the repetitions for the fast op.
But if the second op is slow, no need.