[WIP] Synchronization primitives

Here is the current state of my mutex support. Progress on this has been pretty sporatic and things are still in a state of minor disarray but I've cleaned things up the best I can and rebased against master for reference.

There are a few things I should point out there,

 * This has only been compile-tested as I don't have hardware to test with at the moment
 * I'm not entirely convinced that the `IrqDisabled` token is reasonable given how it is abused in `Mutex::lock`. The idea here is that operations on `Queue` (which is ideally thread-safe) require that you prove that the caller is in a critical section with interrupts disabled. It might be better to instead use a reference-counting approach here instead.
 * It seems like the interface exposed by `task` could use some cleaning up. At the moment I've just marked a few things as `pub` to get things to compile but things could be a bit cleaner.
 * Again, this really hasn't been tested. Feedback is welcome, however.