child_process: improve spawn() argument handling code

This commit adds stricter argument type checking to `normalizeSpawnArguments()`. This commit also removes a number of extraneous checks in `spawn()`. Finally, there appears to be a regression in the handling of the optional `args` argument. This commit adds more thorough testing of `spawn()` arguments. This is related to the work done in #6068.
What about:
```javascript
if (options === undefined)
  options = {};
else if (!util.isObject(options))
  throw new TypeError('options argument must be an object');
```