Added code to reschedule an event when conflicts occur and let external code to block until it does complete.  Still need to test rescheduling an event on invalidation.
Testing to ensure that when there is a conflict, the runtime automatically reschedules.
Had a bug where when one side updated peered data, the other side
would not see changes if no message sequence had been initiated.

There's a deeper problem that had to deal with:

For certain topologies, can have a problem with updating
peered data:

root <------> root partner
a    <------> a partner

root and a are on the same host.  root_partner and a_partner
are on the same host.  Could get into a situation in which do
not update partner data.  Specifically, if root updates peered
data and makes an endpoint call to a, which makes a message
call to a partner, which makes an endpoint call to root
partner, which modifies peered data, we need a mechanism for
root and root partner to exchange the peered data updates.  If
we wait until first phase of commit, then can get into trouble
because root locks its variables before knowing it also needs
to lock root partner's peered variables.  Which could lead to
deadlock.

To avoid this, after every endpoint call and root call, we
send a message to our partners with all updated data.  We then
wait until we recieve an ack of that message before returning
back to the endpoint that called us.

This is clearly very slow.  May want to add checks to only perform
these checks when have loops in topology.