Trying to fix a bug.  Previously,

Assume we have a chain of speculative objects:

A -> B -> C

If B backs out a write lock holder, then at end of backout it 1)
releases its lock on itself and 2) requests A to invalidate C.  If,
before A processes this request, A tries to promote speculateds, it
will promote B (preventing C from being invalidated).  Further, if
B now has no read or write lock holders, it could even promote to
C, which should have been invalidated.

Now, keeping track of reference counter that prevents promoting an
object unless all of its backout requests to root have been processed.
Note: current code hangs on speculation tests.  There must be a bug in
it.  Next several commits should be looking for it.
Forgot to unlock lock on derivative object after acquired it when we succceed in transferring a speculated to root.
Refactored FutureAlwaysValues into their own class.
Added debug asserts to ensure that state controller changes follow expected state diagram.