mw.hook: Make hook.fire actually chainable
It was being called without being bound to the mw.hook instance,
as such the (detachable) callbackList.fireWith method (which
returns its given 'this') returned the callbackList instance
instead of the mw.hook object literal.
The tests weren't catching it because it was just checking one
can call .fire() without it crashing, but it was in fact calling
list.fire instead of hook.fire (which unlike #add and #remove are
not compatible, and we might add new methods later on).
Change-Id: If3d4dfbed494e7ff9f32514e539cfa089aea18ac