Definitions for Ray, Sphere, and Object typeclass

Using a plain Vec3 for Points
Added intersection tests for Ray-Triangle

Changed result type of intersection to include normal.
Ditched Object class in favor of single data type

This is not Java.  Polymorphism does not work that way.
Basically I wanted to be able to have [Object].
Added Scene typeclass and ListScene data type

Switched argument order of intersect, added intersected object
to output tuple Intersection.
Added ColorF tuple.
Added main module

Sets up assignment scene objects
Documentation bump
Camera added

Implemented as a transformer of Scenes, though right now just on
ListScenes.  Additional generality could be useful.
Added assignment-specific camera
Initial camera rays can be generated

...given focal length, width and height of focal plane (in world
units), and width and height of image (in pixels)
Swapped x and y in rays function

I think that would have resulted in a transposed image, since the
final list would have been (0, 0), (0, 1), (0, 2), etc. instead
of (0, 0), (1, 0), (2, 0), etc.
Also added exports for RasterProp and rays
Pipline complete

PPMs can now be written, we're mapping the trace across the view rays.
Unfortunately, the produced image is all background.  Debug time.
Object and ListScene made Show instances

The camera transform looks like its working on the scene ok, but
it's hard to tell with just numbers.
Success! A little...

Rays were being generated in the opposite direction.  Fixed by
putting the focal plane at -f z instead of +f.  This got me more
than just blue (good!), but seemingly the wrong area of the image
(bad!).  On the upside, the image seems to be proportional.
Simple shading upgrade

Scales the brightness of a pixel based on distance to focal point.
Incorrect Camera Transform resolved

I thought lookat was a normal defining the direction the camera
faces, but the algorithm from the slides expected a point within
the scene to be 'looking at.'  I changed the type accordingly for
mkCamera and calculated the lookat point by adding my existing
normal to the eye point.
Added complementBasis generation function to Geom

Will be used to create a coordinate system for cylinder-ray
intersection.
Cylinder test implementation in progress

Good heavens is it complicated.  I can't help but feel it's ill-
advised to try to shoehorn the procedural implementation into
Haskell.
Filled out parallel & perp cases (ray-cylinder)
final skewCase for ray-cylinder WIP
Cylinders up in the house

Ready to submit for CP2