Added a minimize and maximize function to Vector4.  Picks the min/max of each component between the current vector and another vector
Removed extraneous test code
Added a clear() method to BoundingBox (useful when updating)
Updated IntersectionData to include a "two sided" flag that lets receivers know that the normal faces both directions
Added a bake() method to the Surface interface.  Allows children to perform intermediate operations between update and trace
Updated intersects() and trace() to use their respective parameter payload objects (RayData, IntersectionData, TraceData)
Added default implementations for update() and updateBoundingBox()
Added more Data classes
Added a Plane class that represents an infinite plane specified by a point and a normal
Added a placeholder Material class
Added a TerminalSurface implementation of the Surface interface.  Used for objects like lights and geometry that don't/shouldn't have any children.