first pass at asListenable mixin

lemme know what you think.

i'm calling in the unit tests `.listenTo()` just for convenience, but in real development we'd probably have them in the class's `.init()` method.