Precise invocation of subprocesses

Rather than passing a string which we then use /bin/sh to parse a string we construct, pass the precise array of arguments. Updates all users in our codebase to use the precise form.

Also reworks / rewrites base/pump to get rid of a user-visible bad behavior where we would wait until the pipe was going away to write out a partially-filled page (We almost never filled pages because they were 64KB in size). Our page size is now 4KB. See the commit for more details of the reworking.

Side changes:
- Fix broken config option found by updated JHM
- Make \<base/json> handle trailing commas properly. Fixes #247
- Make \<base/fd.h> not close the "unset" state file descriptors (fd = -1).
- Make \<base/tmp_file.h> a little more modern, and allow stealing it's fd.
Mur?