Fix and cleanup limit_cmdline.bounds

+ User-supplied y-coordinates are "bottom up", but the main rendering
  loop uses "top down", so adjust what the user specified to match.

+ Clip at the boundaries of the larger "virtual" image being limited.

+ Round to pixel boundaries.
Add Camera methods for getting the field-of-view
material.lua: Handle float-textures in is_color_val

Float-textures can be converted to color textures, so return true for
them.
Change definition of Ray::length

Incorporate the length of ray.dir into the result.  ray.dir is usually
a unit-vector (in which case the result would be the same), but it
need not be.
Fix Octree::for_each_possible_intersector edge cases

When a ray is absolutely aligned with an axis, just treat it as having
an extremely shallow slope instead of using zero for that axis's
parametric boundaries.

The former essentially just yields very large negative/positive
parametric bounds, which work fine (they'll be limited by other bounds
anyway), whereas the latter results in a zero-sized parametric region,
which causes the search to immediately fail.