C++: Add TIFF strip/tile write support

This PR Includes a number of new features to enable flexible tile and strip I/O:

- `TileBuffer` class for transfer of strip/tile data from libtiff
- `TileCache` class for caching tiles (for the case that we write in an order and tile size which results in needing to retain tiles which can't be immediately written)
- `TileCoverage` class for efficient storage and query of transferred pixel regions using an R*Tree; includes support for automatic region coalescing on insert for keeping region counts (and hence insert and query times) low; PlaneRegion union operator added for this purpose.
- `IFD` caches some commonly needed TIFF tags and provides methods to get and set them.
- `IFD` `WriteVisitor` implements strip and tile writing
- Tests updated to include write tests. 

Note: On Ubuntu 12.04, this needs Boost 1.48 (libboost1.48-all-dev) for Boost.Geometry rather than the default 1.46 (it comes with both).

--------

Testing: All code comes with test cases.  TIFF read and write are tested using multiple tile and strip configurations including whole image, aligned and unaligned (ordered and random) tile and strip sequences with and without image edge overlap.

Manual verification:
- Install graphicsmagick and libpng12-dev (`gm convert` needed to generate TIFF strip/tile variants for testing reading and writing, and libpng needed to read reference test image)
- Run `cmake` and `make` as usual
- Run `cpp/test/ome-bioformats/tiff`
- This will test the tile buffer, tile cache, coverage index and TIFF writing (and reading).  TIFF write validity is checked by reading the written file and validating the pixel contents against the PNG reference data.  You can also check the TIFF files under `cpp/test/ome-bioformats/data`; the write test files have a `w-` prefix.
Good catch! Thinking about my complexity comment, it would be interesting to know how this wasn't picked up by tests.