GeoAxes.add_wms()

After looking over both #404 (@iedwards WMS implementation) and #409 (@rhattersley's WMTS implementation) I've pulled the two together into a slightly more general form.

#409 provided the desirable interactive "retrieve image and show it" functionality which allowing interactive pan+zoom beautifully with WMTS and that is something that I wanted to achieve with the WMS interface. In order to achieve the functionality in #409 @rhattersley implemented a custom WMTSArtist which successively retrieved images from the WMTS server (or local cache) each time it was drawn, and rather than re-implement this, I've split the functionality to expose two classes named ``RasterFetcher`` and ``SlipperyImageArtist`` (also allowing the useful retrieval functionality to exist without matplotlib being available).

I've got a proof of concept WMTS RasterFetcher (very little work), but this PR limits itself to defining the interfaces, and implementing the WMSFetcher only.

I'm not wed to the names, but I do feel that the separation of the functionality has made a big difference to the accessibility of writing a new "slippy map" source (including existing functionality such as the TMS and SRTM interfaces), so please feel free to suggest new names for the classes.