Refactoring

Big refactor:

- npm and grunt
- smaller events
- better style
- better inheritance
- moving to role-based everything
- no longer write to an input if it has focus