Add support for npm-shrinkwrap

Shrinkwrap locks down the versions of a package's dependencies so that you can control exactly which versions of each dependency will be used when your package is installed.

(The `package.json` file is still required if you want to use `npm install`.)

**To install dependencies**:

Using a shrinkwrapped package is no different than using any other package: you can `npm install` it by hand, or add a dependency to your `package.json` file and `npm install` it.

**To add or update a dependency**:

- Run `npm install` in the package root to install the current versions of all dependencies
- Add or update dependencies
- `npm install` each new or updated package individually
- Validate that the package works as expected with the new dependencies
- Run `npm shrinkwrap`, commit the new `npm-shrinkwrap.json`

**Note**: Dependencies must be explicitly named in order to be installed: running `npm install` with no arguments will merely reproduce the existing shrinkwrap.