[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.
> 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.

Which is why it wasn't directly type-hinted (other than docblock) in the first place. But you want to change that. Previously (4.2) the docblock suggest `Illuminate\Foundation\Application`, but I was able to just use `Illuminate\Container\Container` for a CodeIgniter project due to the way it work.