The variable remainingEvents_ may be read by multiple threads simultanously so must be atomic
First version to actually process multiple events concurrently

This version uses a TBB task per Stream to process Events with a mutex used to protect the Source in a critical section. This is sufficient to test the thread safety of the framework internals.
Propagate exceptions thrown during processing to the main thread

The EventProcessor now uses the new C++11 std::exception_ptr, std::current_exception() and std:rethrow_exception() to capture a thrown exception in a thread processing an event and then transfer that exception to the main thread to be rethrown. We use an std::atomic to provide thread safe update of the std::exception_ptr member data in the case of multiple processing threads having an exception. In such a case, only one of the exceptions will be kept.
Added classes to managed resources shared by multiple modules

The SharedResourcesRegistry is the centralized place where resources are registered and where the framework can get SharedResourcesAcquirer instances. These two classes work together to allow safe sharing of non-thread safe resources between modules. A unit test is included to test the two classes.
Switched to using recursive_mutex and moved SharedResourcesAcquirer.h to interface

In order to more easily accommodate unscheduled execution, I switched from using a mutex to a recursive_mutex. This will be less performant since the locks will be held longer than might be needed but it is easier to implement initially. A more performant way would be to release the locks temporarily while we are doing a ‘edm::Event::getBy*’ call.
Made legacy modules thread safe

Now uses a std::mutex to guarantee a module instance is only processing one event at a time. Also uses a edm::SharedResourcesAcquirer to get the legacy resource and therefore guarantee only one legacy module is running at a time.
Use the SharedResourcesAcquirer when a ‘one’ type module declares a SharedResource

All ‘one’ style base classes now hold a SharedResourcesAcquirer and use a new virtual function ‘createAcquirer()’ which by default returns an empty SharedResourcesAcquirer instance. If the module declares the use of a ‘SharedResource’ then the ‘createAcquirer()’ method will be overridden and return an instance with the needed resources. To facility this, edm::one::imll::SharedResourcesUser had to be changed to a templated class.
Need to explicitly instantiate the SharedResourcesUser templated class

The SharedResourcesUser class was just changed to a template. As with the other implementor types, this needs to be explicitly instantiated.
Added missing mutex includes
commented out debug printouts
Make access to EventSetup thread safe

Use a global mutex to serialize access to all EventSetup modules and sources. This is overkill but guarantees that if any two modules/sources are sharing a non-thread safe resource we don’t have a problem.  Changed two of the mutable to std::atomics since they are read/written outside of the critical section guarded by the mutex.
Use less strict acquire/release memory ordering for DataProxy cache info
Merge pull request #1036 from Dr15Jones/serializeEventSetupModules

Multithreaded framework -- Serialize calls to EventSetup modules