[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.
> But that doesn't mean you ditch typehinting, it means you write a wrapper for your Symfony DI class which implements the Container contract, or whatever.

Yes, for e.g if I want to use `Validator` class.

But let get back to `ServiceProvider` and goes based on your "coding to a contract" mindset. Does type-hinting to either `Container` or `Application` contract enough? Does it fit all the contract required by a `ServiceProvider` or it just false position depending on what you provides to it. Does `ArrayAccess` type-hint enough? How would you be certain that `files` service location is available if ServiceProvider required `package()`, how would you be certain that `events` is available when you called `commands()` etc.