Exception stacking and test retry

### Exception stacking

Python 3 has a beautiful Traceback syntax that says
```
During handling of the above exception, another exception occurred:
```
Python 2 don't.

We have a number of nested exceptions (e.g. `URLError` :arrow_right: `ExtractorError` :arrow_right: `DownloadError`) and some of them were lost in Py2 logging. Fixed.

Also, when catching you only got a `DownloadError`. Now that `DownloadError` has a `exc_info` attr holding the original "top" exception.

### Test retrying
Long overdue, but it needed the above.

Now that I have `DownloadError.exc_info` I check that against a list of known network errors and retry a couple of times before giving up.

Eventually, Travis reds will **mean** red.