dedupe: De-duplicate require('npm') lines
lifecycle: proxy the child process' "signal" to npm

This way, if an `npm test` script (or any other lifecycle process) ends
up exiting because of a signal like a SIGSEGV, then npm will exit the same
way (since the `code` will be null when a signal is present), and not
obscure the signal the occurred.

For example, given this `package.json` file:

``` json
{
  "name": "sigsegv",
  "version": "0.0.0",
  "scripts": {
    "test": "node -e 'process.kill(process.pid, \"SIGSEGV\")'"
  }
}
```

Before this patch, npm would obscure the seg fault exit status:

```
$ npm test

> sigsegv@0.0.0 test /Users/nrajlich/t
> node -e 'process.kill(process.pid, "SIGSEGV")'

$ echo $?
0
```

After this patch, the proper signal is relayed to npm, and thus the shell:

```
$ node ../npm/bin/npm-cli.js test

> sigsegv@0.0.0 test /Users/nrajlich/t
> node -e 'process.kill(process.pid, "SIGSEGV")'

Segmentation fault: 11

$ echo $?
139
```
#3759: do not install npm on node <= v0.5
test: use central config for port & address
test: use dedicated cache for mocked packages
test: cleanup taps test output
test: do not hit the real registry, use the mock registry
Always update git urls

Do directly an update if a git url is specified in the package.json
For outdated, print wanted=git and latest=git

Additionally, fixing a small, still unknown  bug in update,
regarding the positions of where, latest and req, introduced
by 2f7fd625a0f2

Fixes #1727