Fix ROOT-186
Rename TClass::kEmulated into TClass::kEmulatedStreamer

This part of the internal/private enum TClass::EStreamerType
Add missing lock in TClass::GetClass
Use Version_t to define TBranchElement::fClassVersion.

Int_t is larger than needed, having the correct type helps avoid confusion when calling
the TClass constructor.
Remove redundant call.

Since we remove the calls to TInterpreter::InitializeDictionaries() in ca7545dba55ac,
calling SetClassInfo a second time has no (new) side-effect.
Encapsulate modification of the list of StreamerInfo.

Make TClass::GetListOfStreamerInfo return a const pointer (hence improving
const correctness).

Add the function TClass::RegisterStreamerInfo and TClass::RemoveStreamerInfo.

[Note more work need to be done to remove the need for const_cast of TClass*]
White space
Add the notion of State to TClass.

This let us be more precise (and simplify the code asking the question)
about the current state of the TClass object.

   enum EState {
      kNoInfo,          // The state has not yet been initialized, i.e. the TClass
                        // was just created and/or there is no trace of it in the interpreter.
      kForwardDeclared, // The interpreted knows the entity is a class but that's it.
      kEmulated,        // The information about the class only comes from a TStreamerInfo
      kInterpreted,     // The class is described completely/only in the interpreter database.
      kHasTClassInit,   // The class has a TClass proper bootstrap coming from a run
                        // through rootcling/genreflex/TMetaUtils and the library
                        // containing this dictionary has been loaded in memory.
      kLoaded = kHasTClassInit
   };

This introduces in particular the state handled by kForwardDeclared,
while the state kEmulated/kInterpreted/kHasTClassInit could be calculated
from combination of IsLoaded and GetClassInfo.

This deprecates the use of the bit kIsEmulation.

Introduce a new constructor TClass(const char *name, Version_t cversion, Bool_t silent = kFALSE);
to be used from creating TClass object when not having much information.

The transition to and from kNoInfo,kForwardDeclared and kEmulated is now handled by
TClass::RegisterStreamerInfo and TClass::RemoveStreamerInfo.

Transition to kInterpreted is handled by TInterpreter::SetClassInfo.

Transition to kHasTClassInit is handled by the full fledge constructor.

We rely on the state kHasTClassInit to avoid generating the emulated collection proxy
when we know we will get compiled one a little bit later.
In TClassTable::Add register class/dict that must be run.

Whenever TClassTable::Add notices that there is already a TClass and
that this class has a ClassInfo (i.e. it will not be a new decl as
far as the interpreter is concerned), we register the TClass and
its dictionary function to be processed at the end of RegisterModule.

Add TInterpreter::RegisterTClassUpdate.

Note: This mechanism can not be a full replacement for the UpdateClassInfo
mechanism as some of the new decl loaded might not have a TClass initialization
(user include the header file but did not request the TClass initialization).
Merge branch improving handling of TClass state