try_promote_speculated should only be called on the root of an object; added an assertion to ensure this.
Found and removed a bug with speculation.  Previously, when we started
speculating on an object, the object we speculated on top of still
resided in any waiting elements' touched_objs map.  This meant that an
object could get duplicate message commands from an event, if, for
instance, a root speculated (still in evt's set), completed a commit,
and transferred its derived back.  In this case, would receive direct
commands from event as well as forwarded from derivative.  Got rid of
this issue by removing root from event's touched obj set when start
speculating.
Adding ralph support for extending transactions to hardware.  In this case, codifying changes made to state controller when actually try to apply changes to hardware.  Will need to refactor BackedSpeculationTest.
Refactored code so that using library's WrapApplyToHardware rather than rolling own.
Once a derived object transfers its events (lock holders and waiters)
to root, root manages them explicitly.  Derived object no longer needs
them, and therefore create empty replicas of them so that root and
derived do not inadvertently perform concurrent accesses on them.
This takes care of a series of concurrent access bugs that I've
noticed.  For instance, scheduling a try_next, being transferred to
root and then root an try_next operating on state simultaneously now
goes away.
ContainerSpeculationTest was occasionally incorrecly reporting
failure.  This was because I set the timing thresholds for determining
if the test actually speculated too tightly.  I relaxed them slightly
in this commit and made them dependent on the number of events running
in the system.