sm: change from shared recvq to peer queues

Have a dedicated queue per peer to avoid lookups on recv.
Use lockfree atomics to allow multiple threads to access the header ring
and avoids using a lock between processes.
We will retain the endpoint fifo for use with the keepalive messages
because we will get a sigpipe if the receiver is closed (the UDS is not
connected and will not notify us if the peer is closed).
Use the atomics to reserve/release the buffer space.
Use a separate thread to block on the UDS - have it wake every second
to see if we are shutting down.