Added method for starting speculation on speculative objects.  This
method creates a new speculative object created from the dirty,
uncommitted state of the original object.
Added code for keeping track of whether a speculative object is the
root speculative object (ie, not waiting on any other dirty values to
finish committing) or whether it's a derived speculative object.
Doing this so that can ensure that derived speculative objects wait to
commit until the events that they've been speculating on have.