Finally found bug with timed speculation tests.  Consider having two
events:

Evt 1: (r A) and (w B)
Evt 2: (r B) and (w A)

the expectation is that we should be able to run both concurrently if
we speculate.  However, previous code failed.  WLOG, assume Evt 1
commits first, and that 2 operates on a derived A and B.  As Evt 1
pushes its write to B, Evt 2 tries to commit.  Evt 2 was not allowed
to start pushing its write to A because A does not promote any of its
deriveds until Evt 1 completes.

Updated code.  All reads complete immediately and unqualifiedly.  If
the root of a speculated object completes a read and has no other
waiting elements, it tries to promote any of its speculated.  In the
case above, this stages Evt 2's write to A.