Bug 1101136 - Make sure that alarm messages don't get dropped within calendar r=millermedeiros

TL;DR; I'm OK with current implementation of `emitWhenListener` method, just explaining how I usually do this kind of stuff.

---

I always miss this kind of functionality on regular `EventEmitter`.. but on Signals I do something a little bit different. Instead of a specific method to `emitWhenListener` I set a property `memorize = true` that way as soon as you add the listener it will trigger the callback if there is already a value in memory. (that way you can avoid race conditions even with multiple listeners/dispatches)

another thing is that in many cases we should probably only care about the latest dispatched value (unless it's a *stream*..), so on Signals I override the *memorized* value at each `dispatch`. - I don't know what is the expected behavior on this case since we might have multiple alarms..

signals example: https://github.com/millermedeiros/js-signals/wiki/Examples#memorize-previously-dispatched-values--forget-values-v070