Add tiled iterators to ImageBuf

The changes are much easier to follow in the individual commits.

* Add an iterator base class: contains information about iteration range, image bounds, position, and related functions
* Iterator and ConstIterator inherit from IteratorBase; derived classes contain a reference to imagebuf, data proxy, access operations, and operator++
* Add a TiledIterator and TiledConstIterator, which minimize calls to ImageBuf::retile during normal iteration
* Use tiled iterators in ImageBuf::get_pixels and IvImage::copy_pixel_channels