[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.
So, the PRs where adding `bindShared()` to the contract was rejected were #5640 and #5770.

Taylor won't remove `bindShared()` and I understand why… much more pain than it's worth.

The reasoning behind not adding it to the contract doesn't make any sense to me. Even if it achieves the same thing as `singleton()`, why wouldn't you put it in the contract? This is about explaining the exposed behaviour of a container.

Otherwise you saying: take a guess… this is the contract of the object you're relying on… go ahead and use `bindShared` but you better hope that the object is an `Illuminate\Container\Container`.