router: split reverser into separate module; redesign interface
router, router.reverser: add back reverse-from-router-name codepath
router.reverser: refactor code, allow access to pattern signatures