Refactor process spawning code

Refactor the process spawning code so that it handles additional
arguments, as it did before switching to use g_spawn_async(). Use a
single et_run_program() method for spawning processes, and merge the
existing implementations.