On py3.x we should attempt to retain an exceptions
causes (if any) so that they can be examined at a later
time. This adds that change into gather and retain this
information via a new failure causes property (that is
lazily populated).
This will aid in the change to traceback2 and the
adjustments made in http://bugs.python.org/issue17911 so
that we can in the future use its exception class instead.
Change-Id: I8cadd7b70c2f638719155d96df4236fc40e18ccf