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.
This does make the small change of setting the `stdio`, `uid, and `gid` fields to `undefined` instead of `null`. I don't believe this has any real effect, but want to get a little feedback.

/cc @tjfontaine @indutny Is there any issue leaving these fields as `undefined` or is there a specific reason they're set to `null`?