Port WMTS rendering to GeoAxes.add_raster().

Notable changes:
 - Rename `RasterFetcher` to `RasterSource`
 - Re-instate `RasterSource.validate_projection`
 - Add `projection` argument to `RasterSource.fetch_raster()`
 - Allow `RasterSource.fetch_raster()` to return `(None, None)` to signify no image to be rendered.
 - Refactored and simplified the internals of the WMTS image retrieval.

Fixes #419.