Previously a map tile cache miss would cause 2x loading of the tile: once from
the remote tile server (which is then written to disk) and once from disk
during the default MKTileOverlay.loadTile function. Instead we now directly
implement loadTile so that we can avoid the duplicate loading and simply
return the fetched remote tile after it is cached, which leads to a
noticeable improvement in offline map performance.
The url returned by MKTileOverlay.url(forTilePath:) is subsequently used by
MKTileOverlay.loadTile(at:result:) for download. In the case of a tile that
was just cached by OfflineTileManager.persistLocally(path:) we now return
the local file URL to avoid downloading the remote image twice.