[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.
> What's the point of a contract if that's going to be the case?

Feel free to take it up with @taylorotwell on that. Since 5.0 is still pre-beta, it not too late to even split `Container` contract to even smaller pieces, and have `Validator` class type-hint that.

> How would these changes stop you using a Container on its own?

Coding to a contract is one aspect of it, but I believe `illuminate/contracts` was also targeted to allow decoupling from some of illuminate concrete contract, which is being some of the common noise from people who using Illuminate components without Laravel. So it might be possible to use Symfony DI (with some tweak) on ServiceProvider (haven't tried it, but that just the idea).