Refactor providers (part 1)

This PR is based on @MattKetmo's work. His initial idea was a sort of
eye-opener to me, hence this PR.

I removed useless methods in the AbstractProvider. I believe we could
have a AbstractLocaleAwareProvider too. The LocaleAwareProvider
interface does not make much sense at this point, I'd drop it.

The ProviderBasedGeocoder should be an aggregator or proxy.

The codebase is getting more and more readable and clean.

Edit: I chose to keep the LocaleAwareProvider interface as it is a
pretty common use case.