Don't use arguments.callee

We already had names for the functions, just use them
Add JSHint support.

Use `npm run check` or `npm run lint`.
Fix a few JSHint warnings.