Protect global list of functions from concurrent access

The list returned from TROOT::GetListOfFunctions needs to be protected
from concurrent access to allow use of TFormulas on different
threads.
Adapt to Chris changes for multithreading.

Chris removed the naked static pointer to fgLogger in
bf35e4fd98458baa5f3a8f3507f73bae4524739c however there are a few places
where it was used. This should address all the remaining issues.
Add constexpr SMatrix constructor.
Make caching of fProperty and fInterShowMembers thread safe

The setting of the caches held by fProperty and fInterShowMembers
can happen on different threads. Therefore the values themselves
are now atomic and appropriate locks are held when updating the values.
Take lock before calling cint

Must serialize access when getting type related information from
cint.
Added additional error reporting

While debugging a problem related to thread safety these additional
checks and error reports were very helpful.
Synchronize construction of TApplication

It was possible for multiple threads to attempt construction of a
TApplication or for one thread to think the TApplication was already
constructed while another thread was in the process of doing the
construction.