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.