Fix the destruction order now that libCling is separate from libCore.

Since the interpreter implementation (currently TCling) is loaded via
dlopen by libCore, the destruction of its global variable (i.e. in
particular clang's) is scheduled before those in libCore so we need to
schedule the call to the TROOT destructor before that *but* we want to
make sure the memory stay around until libCore itself is unloaded so
that code using gROOT can 'properly' check for validity.

The order of loading for is:
     libCore.so
     libRint.so
     ... anything other library hard linked to the executable ...
     ... for example libEvent
     libCling.so
     ... other libraries like libTree for example ....

and the destruction order is (of course) the reverse.  By default the
unloading of the dictionary, does use the service of the interpreter
... which of course fails if libCling is already unloaded by that
information has not been registered per se.

To solve this problem, we now schedule the destruction of the TROOT
object to happen _just_ before the unloading/destruction of libCling
so that we can maximize the amount of clean-up we can do correctly and
we can still allocate the TROOT object's memory statically.
Tweak the dlopen option for libCling (to RTLD_NOW|RTLD_LOCAL)
CreateCling, DestroyCling -> CreateInterpreter, DestroyInterpreter