Move event emitter methods from `gadget` to `base`.
Clarify where hub methods are from.

Fix bug in `gadget.spy`
Fix some jsdoc