prereq structure is now a binary tree

This change is to make the satisfaction algorithm easier
to reason about when (...) and {...} have concurrent parts.

With this change there are now six kinds of prereq:

	()		"true"
	{}		"false"
	(a b)		"and"
	{a b}		"or"
	!a		"not"
	state

The 'true' parse of (a b c d) is (a (b (c (d ()))))
The 'true' parse of {a b c d} is {{{{{} a} b} c} d}

This helps with concurrency, more preciselywith the
notion of "can-be-canceled". If a simple prequesitie
to reach state s involves invoking a transition process
that can be canceled with no ill-effects (say with
a SIGTERM signal), then the satisfaction algorithm
may choose to speculatively evaluate parts of the
prereq expressions, since it can later cancel them.
some more prereq tests
use "edge" instead of "transition" in NFAs

This will reduce confusion when using "transition"
as a state process.
whitespace
improve comments