Completely new implementation of agent/container/behavior synchronization

The new implementation uses a simpler mechanism to keep behavior management in a single agent thread
using a number of behavior queues and sets
Bugfix: DiscreteEventSimulator would leave a running thread if shutdown() was explicitly called to terminate the simulation

Now the thread is not started until start() is called, and is killed when shutdown() is called
Improvements for deterministic behavior -- but still small amount of indeterminism remains

Agents are now started in a deterministic order
Events are triggered in a deterministic order
Improved use of Java collection classes for performance
Minor cleanup
Bugfix: Deadlock at high load fixed