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

...ymorphism
I think the caller should be responsible for wrapping the pointer with unique_ptr if that is what they I want.