Added another speculation test.  Want to ensure that if speculation happens when another event holds a read lock, won't get into trouble.
When speculate, moving all read lock holders to derivative objects.

We do this to handle the following situation:

     SpecObj alpha;
     Event A, B;

     A r_locks alpha;
     B r_locks alpha;

     B tries to w_lock alpha.  B is put into alpha's
     wait list.

     A speculates alpha -> alpha'
         * B is still an rlock holder of alpha
         * B becomes a wlock holder of alpha' when it
           is unwaited in alpha'

     The next time B tries to write, it acquires
     alpha's wlock as well because it has already been
     processed by alpha (ie, it's still in alpha's
     readset).  Now B is a write lock holder on both
     alpha and alpha'.  This is bad, because alpha'
     must wait for alpha before it can complete its
     commit.

Solution, for now, is to copy read set out of speculated object.
Note: this interferes with fairness guarantees.  Should think about
fixing this.

Note: this commit breaks current speculation tests.  It seems to be a
case of deadlock.  Investigating.
Minor typo: prevented adding all readers from prespec object to
speculated on object.