Allow trace call to substitute/suppress exceptions

Originally, upon calling the user's tracing function when an exception
occurs, the interpreter provides the triple `type`, `value`, and
`traceback` via `arg` (the last trace parameter in `frame`, `event`,
`arg`). However, before doing so, it resets/nullifies these values in
the frame object, which had these properties. Then, after the tracing
function terminates, the values are restored. So there is no way to:

a) Change the exception information in the tracing function
b) Suppressing the exception and provide a custom value in its place.

To allow this, I made available 4 extra properties in frame objects:

- target_f_exc_type
- target_f_exc_value
- target_f_exc_traceback
- target_f_retval;

the first 3 corresponds the original respective values before they are
reset. That is, they contain the same values as `arg` in the tracing
function when `event == 'exception'`. They are read-write properties and
changing them will actually change the exception information of the
program being traced.

The fourth property, `target_f_retval`, when assigned clears up the
exceptional state, its value becomes the result of the expression that
raised, and the target program resumes noramlly.