Sort messages between nodes properly

We used to assume the realtime clocks were in sync.  This isn't
realistic.  Use the timestamps on forwarded messages in each
direction to observe the network latency and the offset between nodes.

Since time is no longer exactly linear with all the adjustments, we need
to redo how events are scheduled.  They can't be converted to the
distributed_clock once.  They need to now be converted every time they
are compared between nodes.

Change-Id: I1888c1e6a12f475c321a73aa020b0dc0bab107b3
diff --git a/aos/configuration.h b/aos/configuration.h
index a9fbfe3..c756215 100644
--- a/aos/configuration.h
+++ b/aos/configuration.h
@@ -80,7 +80,8 @@
 // in a single node world.)
 std::vector<const Node *> GetNodes(const Configuration *config);
 
-// Returns the node index for a node.  Note: node needs to exist inside config.
+// Returns the node index for a node.  Note: will be faster if node is a pointer
+// to a node in config, but is not required.
 int GetNodeIndex(const Configuration *config, const Node *node);
 
 // Returns true if we are running in a multinode configuration.