Further split nhop creation and rtable operations.
As nexthops are immutable, some operations such as route attribute changes require nexthop fetching, forking, modification and route switching.
These operations are not atomic, so they may need to be retried multiple times in presence of multiple speakers changing the same route.
This change introduces "synchronisation" primitive: route_update_conditional(), simplifying logic for route changes and upcoming multipath operations.