prevAdjacentRouter only stores the routers removed.

prevAdjacentRouter is never null
prevAdjacentRouter is never reset, so multiple acts() can be running at
once in different threads.

the solution for mutiple acts running at once is to have a sperate
thread for each act() type, or to accept overlapping actions.

assert: _adjacent, _adjacentRouter, _prevAdjacentRouter are never added
to or removed from, so no concurrent modifications occur while they are
iterated over.
Replacing them is fine, as the iteration will finish on the old list,
and whatever caused the replacement will trigger it's own update later.