Created process struct and associated functions.

Replaced manual creation of child test process in test/main with use of
struct process.
Added pipes to capture output of diff processes.

Added pipe_read_all_alloc() function.
Added optional input pipe to struct process and process_alloc().
Now correctly close unused ends of pipes after forking.
Changed test diff commands to use unified diff.

Also set better labels on diff output.
Use struct process to manage diffs of stdout and stderr in functional tests.

Removed unneeded functions signal_name_alloc() and wait_for_child_process()
from main.c.
Added flags for process_alloc() function to enable redirecting stderr.

Changed diff process creation to redirect stderr to stdout.
Created functional_test struct and associated functions.

Extracted most code from run_tests() into various functional_test functions.
Moved helper functions diff_test_output() and test_fillin() into functional_test.c.

Also moved process allocation out of functional_test_fork() into
functional_test_alloc().
Extracted helper functions from functional_test_wait().