[5.0] Add A Service Provider Contract

Allows service providers that do not extend `Support\ServiceProvider` but instead implement the contract, in the spirit of the new Contracts package.

- new ServiceProvider contract
- Foundation\Application typehints on the new contract
- call `$provider->register()' is now resolved using `->call()` so that ServiceProviders not extending `Support\ServiceProvider` can still use dependency injection.
I think I get what you're saying… that the usage of the container in this context is so loose, that it's kind of pointless type-hinting. I see your point, but I would disagree as this is an abstract class. Child classes expect that `$this->app` is a container.

Maybe it should typehint the Container, not the Application, however this may introduce BC breaks if someone somewhere is thinking `$this->app` is an `Application` and using some method on the application.

I agree that it probably belongs in a separate PR. So I'll remove it from this one.