[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.
As I hope you can appreciate, you're not the first person to ask for a minor proposal to an unreleased version of laravel to have it's priority raised, and it does annoy me. This is low priority, and taylor is not going to drop everything and check this out. That's what the high priority flag is there for.