CompositeException stops mutating nested Exceptions

Instead, it aggregates them at print-time. Since nothing is being mutated, there's no chance of accidentally creating a cycle in the Exception chain.  We ran into this in production very intermittently and had to add handling any time we were touching the Exception chain.