std: Introduce a standard Mutex type

Much of the justification can be found in the large implementation comment found
in the module itself.
once: replace Once with an Once based on the high-level Mutex
extra::sync: make semaphore use sync::Mutex
std::rt: limit tasks to 2^16 on 32-bit and 2^32 on 64-bit