Complete refactor to use Grunt