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.
@kelvinj which method that a `ServiceProvider` required directly from `Illuminate\Contracts\Foundation\Application` directly, whatever you put in `register()` or `boot()` is your code. Designing by contract normally are based on a method that the class directly use. 

As an example <https://github.com/laravel/framework/blob/master/src/Illuminate/Database/DatabaseServiceProvider.php> uses `bindShared`, which is not part of any of `Illuminate\Contracts\Foundation\Application` nor `Illuminate\Contracts\Container\Container`.

<https://github.com/laravel/framework/blob/ef0864242e6e6f19a78f941b0710c844016ddf6e/src/Illuminate/Events/EventServiceProvider.php> uses `$app` as ArrayAccess (not part of the contract).