Don't allow duplicate paths in the queue
Make some config options required
Replace getting route collection with route generation

The Symfony Router's getRouteCollection is not cached, so calling it causes the routes to be loaded. The UrlGenerator is cached, but it means we have to manually strip the query string that Symfony fills with parameters missing from the invalidated route.