reduce non-determinism between identical simulations

Makes agent id's deterministic (I think), and makes resource exchange more deterministic.

* created abstract class Ider for other classes to subclass if they have an int id() method.  This allows us to use the agent ID for time listeners even though TimeListener isn't a subclass of Agent (pretty nifty).
* changed time listeners to be map of id's to time listener pointer instead of a set of pointers
* changed node+arc sorting to fall back to a agent id based sorting if preferences are equal
* changed sorting ops to use stable sort.

This seems to reduce the level of non-determinism in my optimization objective func to the 13th sig fig - which seems close enough considering that there are a lot of floating point ops to calculate it.