I'm going to switch the library from using verbose type naming (e.g. ThreadGarbageCollector) to using a Nested Namespace.
For example, ThreadGarbageCollector will instead become GarbageCollector belonging to the Threads sub-namespace under the ESPressio parent namespace.
Therefore, to directly address the GarbageCollector class, the markup would be:
ESPressio::Threads::GarbageCollector
This may look like more code, but proper use of namespaces will in fact reduce the complexity of your code.