Updated for new threading interface
New threading models

Reimplemented threading queuing with three new methods, controllable via
simulation->threadModel(...)

ThreadModel::Preallocate preallocates jobs across threads; threads then
just do their own thing

ThreadModel::Sequential does what we did before (each thread accesses
the queue in parallel).  Changed this model to use an atomic_uint which
is slightly faster than the previous big lock method, even though we are
now back to copying eris_id_ts around

ThreadModel::Hybrid calls new preallocate*() methods for each job (e.g.
Agent::preallocateAdvance()): if they return true, the job gets put in
one of the thread queues, otherwise it gets put in the shared queue.
This should allow for a better mix when some jobs are slow and others
are fast without the downside of prequeuing picking randomly suboptimal
allocations.