This closes a performance loophole / soundness issue when testing relaxed
memory. Below is the relevant commit message:
> Conceptually, commits are happening truly in parallel
> nondeterministically, and the commit threads are introduced to unify
> this source of nondeterminism with the scheduling decisions. Commit
> threads are not real threads, and switching to one is not a real context
> switch, it therefore doesn't count as a preemption.
> For example, this execution clearly has no preemptions in:
> It would be absurd to say it has 1 preemption. But what about this?
> This clearly DOES have a preemption. S1 was preempted by C (but we don't
> count that), and then S2 started to execute! Control should have been
> returned to S1.
> Prior to now, this case was not considered specially. So every commit
> effectively gives rise to a free preemption! This is bad for two
> - More schedules get executed, so testing takes longer.
> - This is actually, in a sense, unsound! Results are potentially being
> reported which could NEVER arise under ANY real-world execution
> subject to those bounds!
> It is because of this latter point that some of the expected results in
> test litmusWP27 have been removed. They require more than the standard
> two preemptions to observe.
> Closes #39.