Update the events system

Rebuild the event system on top of Atom's event-kit package.

- Now automatically destroys event listeners when destroying their host
- Uses ES6 classes for nice syntax (no more `Object.defineProperty`!)