inflight installs, prevent peerDependency problems

Because of the cheesy backdoor mechanics peerDependencies use to get
themselves installed, it's possible that more than one install to the
same place can get queued up when peerDependencies aren't otherwise
depended on. See the comment in the commit for details, and start
getting used to explicitly depending on your peerDependencies, because
that's the future. The future is saner than now.
changed spawn to common.npm
don't pass run arguments to pre & post scripts

  When the arguments after "--" are joined with the command to be
  executed, a check is added to make sure that they are only added to
  the exact command specified by the user.

Rewrote assert function for run-script tests.

  The assert function for run script previously only checked the last
  line of output which made it difficult to test pre and posts scripts.
  This change takes all output lines, removes empty lines and lines starting
  with '>' (npm output) and joins the remainder with ';'. All tests still
  pass unchanged and it should now be possible to test logging in pre and post
  scripts where the output would be "pre script output;main output;post
  script output".

Added tests for pre and post scripts.

  Added tests for what has worked before but has not been tested. (that
  pre and post scripts are executed along with the main script).

Added test running pre script explicitly with arguments

  Test to make sure that if a pre script is exeuted explicitly, e.g.
  "npm run prestart" it shoul accept arguments from the command line.

Added documentation for npm run-script.