Time for another injection... (Refactoring of DataStoreSource)

This change splits and modifies DataStoreSource so that:
- Constructor injection is used in some places we were using the service provider directly
- The provider services (that need to be accessed abstracting based on the configuration of the current context instance) are separated from the mechanism of selection
- Allows common types to be used while still allowing extension with a specific type. For example, only the ATS provider currently has custome conventions. This means all other providers can use a common ModelBuilder/conventions. But if I want to extend EF to add a custom convention just for SQL Server I can now do that by creating a dervived SqlServerDataStoreServices class and using my new ModelBuilder/conventions in the constructor. All other providers will continue to use the same conventions. This means that for cases like that we don't need to create a derived class simply to allow external extension.