Split Ray into two structs: "Ray" and "WorldRay".

This is a refactor in preparation for ray stream tracing with transforms.
We don't want to keep a stack of transformed rays for every ray, as that
would take up far too much space.  So instead we'll keep the world-space
ray and a transformed ray.  When the ray needs to be transformed, we
always do it from world space.

The Ray's themselves are also going to be reordered, so we don't want
the extra weight of the world-space rays inside the Ray struct itself.
Instead the Ray will hold an "id" that lets us index to the world-space
ray when we need to do a transform.

It's a little involved, but hopefully will be worth it.