mutex: fix test
atomics: replace &mut self with &self

&mut self implies that there are no aliases, but the whole points
of atomics and mutexes is that there are aliases accessing the data
concurrently!

Note that the signature of all atomic intrinsics should also be fixed.
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