I know my WMTSArtist had it's implementation split in two (`set_axes()` and `draw()`) but that was a bit messy/opaque, and it would be nice to avoid repeating that here. Just passing the projection into `fetch_raster()` would simplify the interface considerably.

Combining it with a change from `fetch_raster()` to `__call__()` (as suggested by @esc24 offline) would also open the possibility that a "raster fetcher" could be any callable with the signature `(projection, extent, resolution) -> (img, extent)`.