[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.
@GrahamCampbell 

> All feature requests are low priority. Only bugs can be labelled as medium, and security bugs as high.

Thanks for clearing.

> If you don't remove it, I will. _Simple as that._

Sometimes tone *does* come through on the internet.