[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.
@crynobone this isn't about the number of methods needed to implement a different version, it's about describing the behaviour that makes a container a container. And accessing it as an array if part of that behaviour, it says so in the docs.

I agree that the abstract `ServiceProvider` should typehint on the `Container` contract, though.