Add Promise.notify

For use instead of `Promise.signal.observe`, which is obtuse and error-prone (because it'll send `nil` too). Also improved disposal semantics within the `Promise` class.