kernel - Fix exit races which can lead to a corrupt p_children list
* There are a few races when getting multiple tokens where a threaded
process is wait*()ing for exiting children from multiple threads
at once.
Fix the problem by serializing the operation on a per-child basis,
and by using PHOLD/PRELE prior to acquiring the child's p_token.
Then re-check the conditions before accepting the child.
* There is a small chance this will also reduce or fix VM on-exit races
in i386, as this bug could result in an already-destroyed process
being pulled off by the racing wait*(). Maybe 25% chance.