Made TPluginManager thread-safe for I/O

Several changes were needed to make this thread-safe for the I/O case
1) Protect the list of handlers with its own Mutex
2) Use a thread_local variable to hold the status of reading a directory
3) Use gCINTMutex to protect access to fBasesLoaded. Had to use gCINTMutex
 since we need threads trying to read the same dirs to wait for the first
 reader to finish so the lock has to be held over the whole call. In addition,
 gCINTMutex is sometimes taken before and sometimes during the call so using
 a different mutex would lead to a deadlock situation.
NOTE: fReadingDirs is not used anymore but is still in the code to allow
binary compatibility to easy testing. This should be removed in the future.
Mutex lock removed from TStorage::ObjectDealloc to avoid deadlocks

The order of locks between gGlobalMutex and gCINTMutex is undefined
and TStorage::ObjectDealloc calls were involved in order reversal
problems. As it turned out, there is no data structure that needs
protecting in TStorage::ObjectDealloc so we do not need the lock.
Use thread_local for statics in TUUID

TUUID used statics that were causing race conditions. The fix
was to change the statics to thread_local.
Fix thread-safety issues with TError

-There was a potential deadlock situation between gErrorMutex and
 gCINTMutex. The fix was to limit the scope of gErrorMutex locks
-Changed buffers from static to static thread_local. This allowed
 gErrorMutex to be more limited in scope.
Use gCINTMutex to protect access to G__getgvp

This fixed a problem found by helgrind.
Use gCINTMutex to protect access to TBaseClass::Property

Helgrind found a race condition involving TClass::GetBaseClassOffsetRecurse
calling TBaseClass::Property.
Fix thread-safety problems with cleanup of containers

Both TList and TObjArray modify gROOT::GetListOfCleanups() as
part of their cleanup methods. This change uses gROOTMutex to
protect that list.
Fix thread-safety issues of StreamerInfos

-Made TStreamerInfo::fgElement thread_local
-Added an additional test bit to avoid rerunning TStreamerInfo::BuildOld.
 This avoids many cases of changing a TStreamerInfo once it is already in use.
Made gTree thread_local
Properly avoid repeated calls to TStreamerInfo::Build*

-Internal cloning of TStreamerInfo resets kBuildOldUsed so BuildOld will run
-BuildOld calls itself recursively so we only set kBuildOldUsed once we
 leave the function
-Avoid repeated calls to Build
These changes are needed to avoid having multiple threads do the same
work on the same TStreamerInfos which can cause interference between threads.
Added additional locks in TClass to protect CINT data structures