libmn: add blocking call functionality

Implement mn_blocking_call(). This moves a thread out of the run-queue
while waiting for a blocking system call to complete. This prevents
the thread from wasting time-slices that could be used for other
CPU-hungry threads while the blocking call is running.