change signal handler to propagate signals upward

Previously, a user entering ^C to halt the program would end up in an
infinite loop because the overridden signal handler would keep calling
itself by re-raising the same signal that it was handling. This
restores the default signal handler (SIG_DFL) before re-raising the
signal so that the program correctly halts.