(optionally) returns an object which causes the signal handler to be reset
to the previous value, when it goes out of scope.
Also implemented is timeout_call() which takes a timeout value and a code
reference, and executes the code reference wrapped with an alarm timeout.
Finally, two convenience routines are defined which allow one to get the
signal name from the number -- sig_name(), and get the signal number from
the name -- sig_number().