Extensible Object Factories
A number of base classes in imstk use enums for types and object factories. This means anytime one wants to add a class to the factory they have to go to the base class and add it to the enum. This is especially impractical for external use. Additionally enums aren't good for polymorphism. Type checking should more often than not be avoided through polymorphic calls, when it does happen it should be done through dynamic_cast and nullptr checks.