TemplateFreeWorld - replacing compile time polymorphism with runtime pol...

...ymorphism
I strive to limit exposing stuff as much as possible but these two allow injecting custom factories for testing purposes. I could not find a better way of doing this. Also I don't expect to add members to the factories so even if the implementation changes it should not affect binary compatibility.