lint and run all tests before each commit

Not sure if you're going to want this or not, but this branch makes `npm install` create a pre-commit hook that lints and tests the code before each commit and will not let you commit if there are unaddressed linting issues or failing tests. 

(Since the tests can be a bit long to run, you might want to just configure it to lint only. But going crazy for now.)