Expanded speculation test to create an instance where must back out of a speculation because the speculated on variable was subsequently modified.
Updated speculative tests to force backout of a speculating event.
Test currently fails.
A few changes:

  1) If a root object that is being speculated on receives a write,
     it now invalidates all objects that derive from it.  (Still need
     to ensure that derived objects invalidate objects that derive
     from them as well.)

  2) Added a clause to do nothing on backout if a derived object is
     already in the failed state.

  3) Moved failing speculated futures when hit derived_from_failed
     inside of lock.  (In retrospect, this may not matter.)
Refactored code so that have a separate method that invalidates all
derivative speculative objects.  Additionally, after invalidating
derived objects, empties the list of derived objects so that will
start a new set of derivative objects.
When promoting an object from having been a derivative, speculated
object to a root object, had forgotten to update the speculating_on
variable.  This meant that additional get_vals and set_vals would keep
using the old, speculated object instead of using the new root object.
Had forgotten to change atomic internal lists and maps over to inherit from speculative object.
All atomics should subclass from speculative object now.  This means
that methods that speculative directly override (eg., complete_commit)
should be removed.