Changed the Intersection type from a class to a Record.
Some code clean up.
Converted the Material type from a class to a record.
clean up.
Made the Shape type from a class to a record.  I also changed the Sphere and Plane types to functions which create Shape records.

The Shape type is now a record with a Material value and an Intersection fuction.

The Sphere function returns a Shape record with an intersection for a sphere.  Likewise for the Plane function.
Code clean up.
Code clean up.