WIP multi stage install

* [x] Load existing tree with read-package-tree
* [x] Isolate and extract package metadata fetching
* [x] Recursively determine dependencies
  * [x] From package.json
  * [x] From arguments
  * [x] From developer dependencies
* [ ] Account for shrinkwrap in dependency loader
  * [x] Replace deps at the top level
  * [ ] Include similar processing for children too
* [x] *(partially complete)* Dedup tree
  * [x] *(partially complete)* Implement the current strategy, merging back to the lowest common ancestor
    * A version of this exists, but suffers from inexplicable differences from run to run, despite containing no async code. PLUS, adding accesses to certain objects seem to make the differences go away. I put this aside while I work further down the list and'll come back to it with a clear head later.
  * [ ] Implement a "as flat as possible" strategy where we merge back to the root when possible
* [ ] Validate the tree
  * [x] Existing tree validations
  * [ ] Peer depenedencies
* [x] Compare the trees and generate a list of high level actions (ie, install, update, remove)
* [ ] Optimize the action list (that is, fold remove+install into update or move as appropriate)
* [x] Decompose the action list into the lowlevel actions (untar, extract, gyp, lifecycle scripts, etc)
* [x] Sort the action list
* [ ] Possibly further optimize the action list
* [x] Execute the actions
  * [x] add locking to these where appropriate
  * [x] fetch
  * [x] extract
  * [x] preinstall
  * [x] build
  * [x] link binaries
  * [x] install (the install lifecycle)
  * [x] postinstall
  * [x] test (w/ npat)
  * [x] remove
  * [x] finalize (move from staging to final location)
* [ ] Update top-level package.json and shrinkwrap when `--save` is used.
* [ ] Emit wrapped error messages like the old npm-install
* [ ] Load bundled dependenci
* [x] Add progress bar to replace spinner
  * [x] Integrate progress bar code into npm-log
  * [x] Make progress bar prettier
  * [x] Integrate progress bar into multi-stage install
  * [ ] Deeper integration of progress bar into other related tasks, eg, cache, request, rimraf, etc.
* [ ] Implement [linked dependency semantics](https://github.com/npm/npm/wiki/Install-Semantics#linked-dependencies)
* [ ] Update this here list to reference the tickets the various bits are addressing
* [ ] Make an external tool to prototype submitting ideal trees to nodesecurity for validation.  (Consider as a prototype for potential inclusion as an npm command.) http://blog.nodesecurity.io/2014/02/01/new-feature-validate-modules-with-npm-shrinkwrap 
This will ultimately fix #5919 et al.

Builds now occur in node_modules/.staging and modules are only moved to their respective locations at the very end of the process.

See also the [design doc on install semantics](https://github.com/npm/npm/wiki/Install-Semantics).