Improve callbacks (still not rescheduling properly inside one)

This fixes some more surface-level issues with callbacks.  I still need to figure out how to get the callbacks to schedule right without tripping over each other.

Specifically:
 * A callback can be notified by different things, umd, power, etc., but it's only called once.  We were calling it multiple times, with bad parameters.
 * Correctly associates callbacks to the thread they were created on (not the active thread when they were registered.)
 * Callbacks are executed in the order they were created, even if they were not notified in that order.  The umd/wait/wait test actually shows this, but it was working by accident because of the types.
 * Callbacks are silently deleted when the thread they were tied to is deleted.

Also cleaned up waits a bit more, noticed a few debug warnings, when decrementing an iterator that's already at begin.

-[Unknown]