ServiceProvider 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 thanks for the heads up.

Given the move towards contracts this should be addressed. If `Application` isn't the right typehint, then the underlying concept should be identified and used.

The `$app` is a thing, so what is it?

#4901