Return Token and Reraise Exception on `complete`

This commit makes it so that when an exception is thrown in
the `step` method of SecurityContext, if it has an attached token,
the token is returned and the exception and traceback are saved.
The exception and traceback will be reraised by `complete` the next
time it is checked.
Check last error in all SecurityContext methods

Previously, `_last_err` was only check on complete.  It is now
checked on every method.  This ensures that the error actually
gets thrown, and makes it more likely that the stored traceback
actually gets deleted.  This functionality can now be disabled
by setting the `__DEFER_STEP_ERRORS__` class variable in
`SecurityContext` to `False`.
Don't manually save tracebacks in Python 3

Python 3 automatically saves the traceback with exceptions and uses
it when reraising the exception, so we don't have to manually save
the traceback.  Also, just use "raise" instead of six.reraise
when simply choosing to raise the exception without saving it.