Extract Generic NominatimProvider

OpenStreetMap uses open source software called Nominatim for their geocoding
service, this allows people to use alternative installations of that software
Merge pull request #258 from davedevelopment/abstract-nominatim-provider

Abstract nominatim provider