Cleanup Space interface a bit

+ Make Space::Occludes non-virtual (there's no reason for it to be
  virtual).

+ Make Space::for_each_possible_intersector and Space::SearchState
  protected, as they're only used by subclasses.

+ Make subclasses of Space::IntersectCallback private nested classes
  in Space (which allow them to access protected fields).
surface-renderable.h: Forward-declare RenderContext
Add Intersect::recursive_ray method
Use Intersect::recursive_ray method