Splitting mutex and semaphore, preparing the message queue to use both server and inproc syncs.
-- v2: server: Use a signaled flag for message queue sync. server: Use a flag to keep track of message queue waits. server: Split semaphore to a dedicated sync object. server: Split mutex to a dedicated sync object. server: Move some checks inside of mutex do_release.