mutex: improve native mutex

- Refactor imp
- Make Windows mutexes statically initializable
- Remove rust_builtin.c
- Split into Mutex and Cond
- Change &mut to &
rt: introduce task.can_block()
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