[5.0] Use container to resolve objects in Illuminate/Routing/Router

In order to allow overriding of the default Route, RouteCollection, and ControllerDispatcher, the IoC container (which is already available to the router) should be used to build new objects rather than hard coupling to the actual class.

This may also be worth creating contracts for Route, RouteCollection, and ControllerDispatcher.