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
Does this support the way you can lazy reference github in npm? e.g. `uber/npm-shrinkwrap` ?