Grunt and Node.js shells for web subproject

Introduces a package.json to list dependencies and a Gruntfile.js for
configuring deployment and testing tasks.
Basic copying and minification of deployment files

Setups Grunt takes to handle copying and minifying files into a "dist"
subdirectory within the web subproject.
Deployment and testing support for GAE in Grunt

Finalizes the "deploy" and "test" Grunt tasks with calls into the GAE
plug-in.
Versioning for Google App Engine deployments

When using Grunt, Google App Engine deployments will have their versions
automatically set to the either the tag, branch name, or hash (in that
order) using the output of `git describe --all --always --exact-match`.

This name is normalized to make it friendly with GAE version strings by
replacing all non-alphanumeric characters with hyphens.
Display help as default Grunt task

If the user calls the Grunt CLI with no task (or with 'help' as the
task), then we can call grunt.help.display() to display the help screen.
Descriptions for Grunt task lists

Adds explanations for the 'deploy' and 'test' Grunt tasks for display on
the help screen.
Apply htmlmin options globally within Grunt

These aren't likelly going to change from target to target, as more
targets are added in the future (except possibly overriding individual
options on a per-target basis, maybe).
Merge branch 'topic/web-deployment' into progress

These features enable the deployment and testing of the project using
minified assets.