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.
If you want to use a service provider outside of Laravel, it could be possible to just pass in `Illuminate\Container\Container` or array (depending on what the requirement for that service provider).

As of now, there no tight coupling that is mandated to it, and when using with Laravel, you would always expect the variable `$app` to be an instance of `Illuminate\Foundation\Application`.