    link.router()

Return a shallow copy of the `router` property of the link.

For backwards compatibility, if there is no router, the function also checks whether the legacy `manhattan` property is set on the link and returns `{ name: orthogonal }` if it is.

    link.router(router [, opt])

Set the `router` of the link.

If the `router` argument is an object, it is expected to have the form `{ name: routerName, args?: routerArgs }`. Here `routerName` is expected to match either the name of a built-in router or the name of a custom router.

If the `router` argument is a function, it is expected to define a custom router with the signature `function(vertices, routerArgs, linkView)` that returns an array of route points.

    link.router(routerName [, routerArgs, opt])

Set the `router` of the link to have the value `{ name: routerName, args: routerArgs }`.

The `routerName` string is expected to match either the name of a built-in router or the name of a custom router. The `routerArgs` parameter is optional.