i1673 PEP8 formatting in `ultratab.py`
i1673 implementation of py3 proper error handling

I refactored ultratab.py a bit. `structured_traceback`
function was much too long. I extracted some of the code
to separate methods.

I added support for py3
exceptions which store information about previous
exceptions in their `__context__`.
i1673 some DRY refactoring
i1673 don't use __suppress_context__ attribute
i1673 fix py2 bug in ultratb
i1673 add tests for python3 exceptions
i1673 remove confusing traceback truncating
i1673 change formatting (dashed line only on top)
i1673 use __cause__ first in chained exceptions
i1673 rerun notebook with exceptions in nbconvert
Merge pull request #6065 from atteroTheGreatest/i1673

#1673 Display of chained exception