Decouple header dependencies and fix include ordering
As the CLING interpreter must parse all corresponding header files when loading a shared libraries, decoupling the library's header files as much as possible is very desired. It reduces the amount of code to parse significantly, which results in faster load times and less code to trip over increasing robustness.