Composite Exception - Circular Reference Handling

The printStackTrace and getCause implementations have different approaches to handling circular references.
If on a JVM where printStackTrace is called directly, the full causal chain will always be printed. If on one such as Dalvik where getCause is invoked directly then it will cut the causal chain if it sees a duplicate.

See https://github.com/ReactiveX/RxJava/issues/1405