#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)
Well, this logic actually doesn't assume it.

It assumes that for python3 an exception has both `__context__` and `__cause__` and the value of cause is used to choose one of the python3 'chaining' messages - `__cause__` is by default set to `None`, but when some exception is a direct cause (raise SomeException from e), `__cause__` is set appropriately.