Tell ROOT we are going to use multiple threads

For ROOT 5 we must load all plugins before starting the threaded event processing. Therefore I added an option to turn on loading of all dictionaries up front. Also, ROOT requires us to call TThread::Initialize() in order to get ROOT to use internal mutexes.
Tell ROOT not to keep a list of all TObjects
Classes inheriting from TClassStreamer must implement the Generate method

If you tell ROOT that it needs to be thread safe, it then expects all classes inheriting from TClassStreamer to implement the Generate() method. The method simply uses the copy constructor of the object to return a ‘new’ed version of the object.
ROOT requires a dummy TThread object be instantiated in each thread

We must follow ROOT’s rule which requires a dummy TThread instance be created in each operating system thread in order to create their own thread local storage. Given that we don’t know what thread a TBB task will be run, for right now we create a thread local static TThread on the function which is called from both the main thread and by TBB tasks in order to process events.
Have InitRootHandlers handle setting up ROOT for threading

Instead of spreading around the different calls needed to setup ROOT for threading, all the methods are concentrated in InitRootHandlers. The EventProcessor then calls the correct virtual methods of the base class RootHandlers Service interface to handle the setup.
Merge pull request #1103 from Dr15Jones/useThreadsWithRoot

Multi-threaded fixes -- Use threads with ROOT