first pass at asListenable mixin
Merge pull request #5 from siq/aslistenable

first pass at asListenable mixin