[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.
To correct myself: the `Application` contract *already* extends the `Container` contract.

Now, one area that doesn't quite feel write is the `ArrayAccess` stuff. The abstract `ServiceProvider` really only uses the `Container` / `Application` as an array. So, I'm wondering whether the `Container` contract should extend `ArrayAccess` and therefore the `Container` only implements the contract. That solidifies the contract, seeing as the `Container` is used like this alot.

Thoughts?