Add a Mutex, AtomicU64, and deal with lots of related fallout

This is the follow up PR to #11520, #11462, and #11509. This takes the original approach for #11462 for the mutex (due to my [comment](https://github.com/mozilla/rust/pull/11520#issuecomment-32575546)).

I had originally added an AtomicU64 for usage in #11520's implementation, and I figured I may as well leave it implemented because it may turn out to be useful someday.