Better integration tests

Currently, the integration tests are run by chaining together a series of tasks in the main `gruntfile.js`.  This works for some limited cases, but is getting awkward to maintain.  Instead, test fixtures should include their own `gruntfile.js` and assertions should be made after running the default tasks.