First pass implementation of a MultiThreadedJobDistributor.
For now, the only application that is even remotely safe to use with
the MTJD is rosetta_scripts, and even here the incredible prevalence
of global data that people seem unable to ween themselves from makes
many many rosetta_scripts not safe for use with the MTJD.
To activate the MTJD, use extras=cxx11thread and a compiler that
supports C++11.
Random number generation is now threadsafe. RandomGenerators should
no longer be constructed in individual .cc files, but instead should
use the single, global RandomGenerator accessible through the function
numeric::random::rg(). I'll email out the python script I used to
replace RandomGenerators so that it's easier for people to fix their
code following this change.
Tracers are now threadsafe. Tracers must now be declared "thread_local"
in addition to "static". There's currently nothing enforcing this,
unfortunately, so you'll just have to be super mindful for now.
Modest refactoring of the JobDistributor's go_main() function, which was
a mess and is now just a little bit less of a mess.
Changing the access pattern for the JobOutputterObservers so that they
now attach themselves to the JobDistribotor::current_job() instead
of to the JobOutputter (which is not threadsafe). It looks like
the PoseEvaluators will also need to be revamped in a similar fashion.