Separate ServiceProviderFactory from ServiceProvider class.

Lessens the chance of code extending a ServiceProvider picking up the wrong Factory.