Fix comments for Space::for_each_possible_intersector
Fix crash in Octree::Builder::copy_optimized_nodes

Don't crash when there are no nodes at all.
Move Surface rendering interface into Surface::Renderable

Remove rendering-related methods from the basic Surface class, and put
them into a separate rendering-interface class, Surface::Renderable.

For simple surfaces that inherit from Primitive, little changes except
for some type names, as Primitive inherits from both Surface and
Surface::Renderable.  These objects do end up with two vtables, which
adds a pointer to each object, but they aren't particularly small in
the first place.

For more complex objects, such as Mesh and Instance, and for
non-renderable objects, such as SurfaceGroup, however, this cleans
things up, as they now do not need to define rendering-related methods
that will never be used.

Because there can now be separate Surface::Renderable objects that
exist only during rendering, a mechanism is also added to keep track
of and properly delete such objects once rendering is complete.
Optimize Octree search by using ray parametric form

Instead of using positions to search in an Octree, formulate the
search in terms of the ray's parameter space.  As the goal is to find
intersections with the ray, anything of interest can by definition be
expressed this way, and doing so is both more efficient and simpler.

In addition, child-nodes are now searched starting with those closest
to the ray's origin, which in some cases results in faster pruning of
the search space.