implemented npm-shrinkwrap sync

This is the syncing algorithm for `npm-shrinkwrap sync`

it reads your npm-shrinkwrap.json and ensures
  node_modules is the EXACT same. This means every
  version & sha recursively and also removing any
  excess folders from node_modules.

This implementation ignores `package.json` locally.

cc @sh1mmer @jcorbin @Matt-Esch
maybe change "hash" to "object". I found this confusing because I was thinking of cryptographic hashes like MD5 and it took me a while to figure out what you meant.