#1673 Display of chained exception

I changed displaying exceptions to support chained exceptions in python3. It fixes [#1673](https://github.com/ipython/ipython/issues/1673).

Nothing changed for python2. However I did some refactoring in `ultratab.py`, such us PEP8 fixes and extracting code to smaller methods (major function for formatting traceback was ~300 lines long and rather ugly).

I created two tests for the new behaviour.

Here is how it looks like in notebook:
![Imgur](http://i.imgur.com/W69oHuU.png)

[edit -- now without dashed lines between tracebacks] 

![Imgur](http://i.imgur.com/DpgaCQi.png)
I still think this flow assumes that `__cause__` cannot be set without `__content__`. If `evalue.__content__` is None, or does not exist, then it never takes this branch (`if exception:` will be False), so it will never check `evalue.__cause__`.

I would do something like this:

```python
def get_chained_exception(evalue):
    cause = getattr(evalue, '__cause__', None)
    if cause:
        return cause