INTERSECTION TESTS

Currently the intersection test returns only the closest valid
intersection. In many cases it's all we need, but this also means that
we end up walking the shadow ray from intersection to intersection
when doing translucent shadows.

Alternatively each intersection test could return *all* the
intersections for that ray: it might save some effort.

MEMORY

A bit downwards of 20% of runtime is spent doing GC. Maybe
there might be point for non-consing varients of some functions:
mostly ray, vector and color-ops. Profile first, though.
