Cleaned up interface for first_phase_commit.  Now, instead of a
subclass overriding first_phase_commit (eg., to push changes to
hardware), it should instead override
internal_first_phase_commit_speculative or
internal_first_phase_commit.
There are instances where an event that is speculating on a preceding
value of an object begins its commit before the root object has
committed.  In these cases, we create SpeculativeFutures that the
SpeculativeObjects must ensure return true or false, eventually, with
whether the commit to the speculated object can actually be written to
the root object.  Ensured that ExtendedLists actually try to reconcile
these changes by pushing them out to hardware instead of just always
accepting their changes.