Take advantage of covariant return types in the tiler

This creates more logical access to the tile data returned by the
tilers when calling `createTile()` by using polymorphism to create
specialised tile types.
`Tile` is now derived from `TileCoordinate`

This makes it easier to pass tiles around to functions requiring tile
coordinates.
Terrain tile heights are guaranteed to have a width of 16 bits
Define the grid iterators via inheritance rather than templates
Moved Implementation Overview to the doxygen documentation
Updated version number to v0.4.0

* Enable GDAL dataset creation options to be passed to `ctb-tile`
* Speed up warping using a linear approximator
* Allow the warp memory limit to be specified
* Improve inheritance model and tile type
* Various fixes