3.x port of localized font caching

This change creates a new font registry and memory cache on the `mapnik::map`. This replaces a previous iteration of this work against Mapnik 2.3.x (#2286).

This is important because:

 - We support the `font-directory` property which allows fonts local to an XML to be registered during `mapnik::load_map`.
 - However, these fonts are currently put in the the global `freetype_engine::name2file_` cache when they instead need to be local to the map.
 - Unless fonts are local to a map then a clash is possible when registration of two different font files with a common name is done by two different maps in the same process.

This change adds two key new methods to the `mapnik::Map`:

  - `mapnik::Map::register_fonts` - Just like the global register fonts except that it registers them to the map (but does not cache the actual font data).
  - `mapnik::Map::load_fonts` - this takes the registered fonts and caches them in memory on the map. Then during rendering font access will not incur a first read i/o penalty (which can be > 20-30 ms for large fonts). If you are sharing map instances across many rendering threads (say if using vector tiles as datasources) then this must be called before entering a thread since it is not designed to be reentrant and also the on-the-fly caching of font data in `freetype_engine::create_face` will not write to this cache (since Map's need to be immutable during rendering). If `load_fonts` is not called and no map fonts are cached then the previous behavior will kick in: fonts will be cached on the fly to the global cache.