adding a custom factory system for components. Next step: Make components not derive from QObject