Enable GDAL supported raster tiles to be created

In addition to terrain tiles, the `terrain-build` tool has had the
`--output-format` flag added which allows any write enabled GDAL
raster format to be output instead of terrain tiles.  This mirrors the
functionality of the `gdal2tiles.py` script when called with the
`--profile=geodetic` option.
Add support for custom tile grid profiles

The new `Grid` class generalises tile grid generation to allow custom
tile grid generation.  The TMS Global Geodetic and Global Mercator are
specialisations of `Grid`.
Renamed LatLon instances to CRS

This better reflects the new grid generalisation
Attached a spatial reference system to the grid
Decouple the grid from the tiler

This enables grids other than `GlobalGeodetic` to be associated with a
`GDALTiler`, allowing tilesets in different grid systems to be
generated.

To capitalise on this the `terrain-build` and `terrain-extents` tools
have the new `--profile` and `--tile-size` options.  `terrain-build`
also has the `--output-format` option allowing GDAL formats to be
generated in addition to terrain tiles. This turns the tool into a
general purpose tile generator.
Renamed arguments to be more descriptive
Updated the public header and list of headers to be installed
Set the significant decimal digits precision when creating geojson
Move the band check from the GDALTiler to TerrainTiler

The GDALTiler may produce datasets without any bands (e.g. VRT), but
this is not viable for the TerrainTiler which requires at least one
band.