cpp: tiff: Add TileCoverage class
cpp: tiff: Add TileBuffer
cpp: tiff: Add region union operator
cpp: tiff: Add region validity check
cpp: tiff: Add region area method
cpp: tiff: Add TileCache
cpp: tiff: IFD image writing uses TileCache
cpp: tiff: Move TileType out of TileInfo
cpp: PixelBuffer and VariantPixelBuffer: Add assignment operators
cpp: tiff: Null TIFF handle on close
cpp: tiff: Add IFD convienence methods and tag caching

Needed when writing since we can't read set tags with the
libtiff API.
cpp: tiff: Add TIFF methods to get and write the current directory
cpp: tiff: Add PlaneRegion stream output operator
cpp: tiff: Implement TileInfo in terms of IFD methods
cpp: tiff: Clear TileBuffer to ensure consistent behaviour
cpp: tiff: Implement tile writing

Also includes some minor reading cleanups.