Make it possible for arc4random() family of functions to fully
utilize multiprocessor benefits.

This is done by introducing a global queue of random states and
a conditional variable to protect the queue.  The operation is
roughly like this:

When requesting for random number, we first, try to get a random
state from the global queue (the static state rs0 is used first
and for single threaded application).  If we can't get one, we
try to allocate a new state when existing states do not exceed
CPU count, or otherwise wait for wakeup.  The state is removed
from the global queue prior to use.

After using the state, we return back the state to the queue,
then wake up one waiter if there is any.