Add retries and logging to GeoNames requests

This addresses #7705. GeoNames name searches failed with URLError when
a bad connection or url interfered with openurl. This allows retries
in the case of short-term issues and handles total failure by logging
and passing to the next geocoder.
It looks like `result` could be empty or could fail to have a 'geonames' property, in which case this would throw a KeyError exception.