Catch signals while printing the results of expressions.

In the REPL it is possible to interrupt the computation of an expression using ctrl+c and return to the repl, rather than exiting the interpreter. e.g. If an object big_object is really expensive to print, we can interrupt `>print(big_object)` and return to the repl.

However, interrupting the semantically similar `>=big_object` exits the interpreter.

This patch catches signals that occur whilst doing the latter, making the behaviour more consistent.

An alternative and more involved approach would be to change `>=big_object` to execute `print(big_object)` rather than `return big_object.`