test: use assert.throw to test exceptions

The test wasn't checking directly that an assertion was thrown. Instead,
it was checking that spawn did not sucessfully spawn a non-existent
command.

However, the command chosen, dir, exists in GNU coreutils, so it exists
on Linux (though not on BSD derived OS X). The test as written passed on
Linux, even with the TypeError it is supposed to be checking for deleted
from spawn(). It would also pass on Windows if a ls.exe existed.

The approach is unnecessarily obscure, `assert.throw()` is for asserting
code throws, using it is more clear and works regardless of what
commands do or do not exist.
child_process: check type of args is an array

execFile and spawn have same API signature with respect to optional arg
array and optional options object, they should have same behaviour with
respect to argument validation.
child_process: check fork args is an array

Optional fork args should be type-checked with same behaviour as the
equivalent argument to spawn.