Make sure datasource calls channel listeners directly on widgets (at any time)

Right now the channel listeners are fetched from the widgets and referenced from that point on, which doesn't make use of the JavaScript's dynamic power, which is that any property of any object can be overridden at any time (such as the method of an instantiated function). The impact of this shortcoming is felt when trying to wrap a widget callback for testing purposes (it will never be called if wrapped after the datasource collected it)