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 yes, the interface is the public API describing the behaviour. 

I don't know why `bindShared` isn't part of the `Container` contract, sounds like it should be. And in that case, it sounds like either:

1. The `ServiceProvider` contract should typehint the `Container` contract, _or_
2. The `ServiceProvider` contract should typehint the `Application` contract, which should extend the `Container` contract