each iteration returns internal exception + trace

PyObject_CallFunctionObjArgs should raise an exception if NULL is
returned, in the event that it is we capture the exception state and
once we return control from the c iteration loop raise the correct
exception (rather than the generic one used previously).
This should allow for easier debugging from the python layer when an
error occurs within the callback.

All Unit Tests Pass.