Added intersection class that encapsulates the intersection
point, the intersection surface normal, and the intersected
shape. This encapsulation allows this information to be returned
by the intersection calculation, rather than returning one and
having the other two returned as parameter side effects.