Reverting to earlier implementation TypeReflection::isAssignableFrom

Implementation based on RootCollection iteration segfaults in some
cases.

Indicates a bug in RootCollection - to be fixed later.
Fixed include statement in HasValue.h
Removed ambigous conversion from Props to std::map
Change JSON output precision for floating point values to 16 digits

This should allow conversion between double values and JSON strings
with perfect reconstruction.
Modified ROOT dictionary generation to not include current path
Fixed PropKey::CompareById, operator() was not const
Changed definition of size and iteration for PropVal of type Props

Props are now treated as scalars with PropVal::size() == 1 and the same
iterator behaviour as the other non-vector value types.
Changed string to/from name conversion behavious in PropVal

* Names now also count as strings.
* Strings are no longer auto-converted to names.
Added PropVal::at methods

Also made implementation of PropVal::operator[] methods more compact.
Added ADL overloads of std::to_string for Name, PropVal, etc.
Removed TString from several interfaces

Also improved implementation of DbrxTools::version()
Added class FormatString and user-defined literal "_format"
Replaced use of TString::format by "_format" in TypeReflection and RootIO
Added class Configurable
Re-wrote logging based on FormatString
Changed LoggingFacility::global() implementation to increase performance

Using a global static value instead of a local static in a function avoids
calls.

Also added output stream flushing.
Added "dbrx_" prefix to logging macros to avoid possible name conflicts
Added specializations of std::hash for Name and PropKey
Use perfect forwarding in FormatString wherever possible
Added static method FormatString::printAny