Fix signal handling in all the launchers

Currently any process launched under a debugger or other supervisor runs
with certain signals masked. This is especially unhelpful because one of
them is used by gdb to interrupt the inferior.

This is fixed by switching to hbcxx::system() which managed signals before
launching a sub-process.

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
Fix ordering of argument processing

As comments...

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
Introduce wrappers for exec, setenv and unsetenv.

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
Modify gdb launcher to preserve arg0

Uses the exec-wrapper feature of gdb in order to launch pass the correct
value in argv[0].

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
Review and update the documentation.

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
Allow arguments to be passed to gdb.

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>