Merge pull request #84 from normanzb/develop

fix mistakenly using .call(), replace it with .apply()
Override on/off/reemit on gadget to force context to `this`. Closes troopjs/troopjs-core#85
Fix comments
EventEmitter should make sure handler[CONTEXT][PHASE] is not initialize*|finalize*. Closes troopjs/troopjs-core#86
Refactor event emitter to work with when.js 2.0. Closes troopjs/troopjs-core#87
Rename some variables

Update comments
Really store handled
Slice in wrong place.
Consistent naming of argsLength.
Better implementation of off, both context and callback is now optional.
Rename 'remove' -> 'keep'
Change order of arguments for 'reemit' and 'republish'.
Make context and callback optional in reemit
Remember we changed the order of context and senile.
Change order of emit/reemit.

If handler[CONTEXT] is not set, don't use for context filtering
Actually, remove is what we want to call that label
Actually update handler[HANDLED]
Refactor off (again)
fix "exceeding maximum call stack" error which caused by mistakenly calling to self.on
add tests for Gadget.emit/on/off