[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.
> More complicated how? 

* 4 method for ArrayAccess
* 14 method for Container contract
* 7 method for Application contract

Even with this PR (at current state) is merge, for someone to come out with an alternative `Application` implementation, you already need to define 21 methods (and none of Application contract is being used inside the ServiceProvider).

> In a lot of places the container is accessed as an array so any alternative implementation will need it anyway.

While there are, some doesn't. <https://github.com/laravel/framework/blob/4.2/src/Illuminate/Validation/Validator.php> for example. Defining 21+4 methods when you just need to use `make()`, doesn't really seem worth it.