Move and rename fcd_lib_set_fd_cloexec()

fcd_lib_set_fd_cloexec() is called only from fcd_lib_cmd_child(),
so move it immediately before that function and rename it to
reflect the fact that it's only called in a fork()ed child.
Make fcd_lib_child_set_cloexec() abort on error

fcd_lib_child_set_cloexec() is only called from fcd_lib_cmd_child(),
which aborts if it returns an error, so just make fcd_lib_child_set_cloexec()
abort on error.
Fix error reporting between fork() and execv()

Only use asnync-safe functions when reporting/logging errors in a
child process.

http://pubs.opengroup.org/onlinepubs/009695399/functions/fork.html:

  If a multi-threaded process calls fork(), the new process shall
  a replica of the calling thread and its entire address space,
  possibly including the states of mutexes and other resources.
  Consequently, to avoid errors, the child process may only execute
  async-signal-safe operations until such time as one of the exec
  functions is called.