CHANGED singleton classes from old-style private constructor/static
getInstance() to enum singleton pattern. Added threading for Console in
PluginClient and modified dependency injection to keep track of
unloading classes using phantom references. However, singleton
components still not get unloaded as they keep themselfs alive due to
holding a strong reference to themselfs.