Create ConfigurationSourceProvider interface to allow customization of the source of the configuration

Created a fresh pull request with the new ConfigurationSourceProvider interface. I decided to call it ConfigurationSourceProvider vs ConfigurationProvider as the later might imply that it returns the actual Configuration.