This change extends the nd6 lock to protect the NDP prefix list and the
list of advertising routers associated with each prefix. To handle cases
where the nd6 lock must be dropped while iterating over either the
prefix or default router lists, a generation counter is used to track
modifications to the lists. Additionally, a new mutex is used to serialize
prefix on-link and off-link transitions. This mutex must be
acquired before the ND6 lock and is held while updating the routing
table in nd6_prefix_onlink() and nd6_prefix_offlink().
As with default router objects, prefix expiry is split into two steps:
unlinking from the prefix list with the ND6 lock held, and then deletion.