Major code cleanup / refactors. Still need to do Shape and ShapeFactory.