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.