A node and grunt-based dev environment

This resolves #8.