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.
Prematurely returning values for traced functions.

Quick 'n dirty hack to allow a tracing function to return a custom value
for the traced/target frame without having to execute the rest of its
code.