Move exception mapping out of Geoname.cs and do caching of downloads