Backtrace: allow exceptions to be laundered while keeping backtraces

Sometimes we have a local exception that we want to catch and convert
into another kind of exception. If we catch one exn and raise another
then we lose the backtrace. The function 'reraise' transfers the
backtrace from the old exception to the new.

Signed-off-by: David Scott <dave.scott@eu.citrix.com>