Rewriting/fixing Monitors to work appropriately.

We now have a new ThreadStatus: UNINTERRUPTIBLY_BLOCKED, which threads
transition into once they are no longer waiting on a monitor due to a
notify or an interruption.

I also fixed some native method control flow bugs related to them
asyncReturning when they throw exceptions. A native method will only use
the synchronous return value from the JavaScript function as the JVM
method's return value if:
* The thread is still RUNNING.
* The native method is at the top of the thread's call stack.

I rewrote the WaitTest, but I need to tweak it so the output is
deterministic. Right now, it shows that we are in conformance with the
spec, but the ordering is different. :-)