Base functionality to allow returning response objects

This PR lays the foundation for routes and routers returning response objects if required. This comes in handy in multiple scenarios, for instance:

- An HTTPS-only route can trigger a redirect from HTTP to HTTPS
- A route limited to specific HTTP methods can trigger a 405 (method not allowed) response
- A console router could print out a help page with all commands