View listener with wrapper

This is built on #863, it adds a wrapper enabling chaining, type hinting and simpler listeners.
When the callback doesn't return anything (i.e. `null`), the controller result should not be overwritten.