The surface normal for an intersection point on a shape is now
calculated as a side effect of the intersection calculation.
This removes the necessity for the getSurfaceNormal method of
the Shape interface. This method generated compiler warnings,
because some shapes require the intersection point for the
normal calculation and others do not (warning=unused parameter).

Also, transmissive shapes now effect the coloring of objects
that appear behind them. The color of the blocked object is
weighted by the transmissive constant of the transmissive
object. This also gives transmissive objects shadows, where
previously none existed.