kernel - Use pool tokens to protect unix domain PCBs
* The read, status, and write paths now use per-pcb pool tokens
instead of the global unp_token. The global token is still used
for accept, connect, disconnect, etc.
* General semantics for making this SMP safe is to obtain a pointer
to the unp from so->so_pcb, then obtain the related pool token,
then re-check that so->so_pcb still equals unp.
* Pool token protects the peer pointer, unp->unp_conn. Any change
to unp->unp_conn requires both the pool token and the global token.
* This should improve concurrent reading and writing w/unix domain
sockets.