title: Inconsistent exception details in parallel stream
body: <p>Most of the time, exceptions thrown in a parallel stream won't have all of its attributes.</p>
  
  <p>Ex:</p>
  
  <pre class="lang-java prettyprint-override"><code>@Test
  public void test() {
      assertThatThrownBy(() -&gt; Stream.of("1", "2", "asdf").parallel().forEach(Integer::parseInt))
              .asInstanceOf(InstanceOfAssertFactories.type(NumberFormatException.class))
              .extracting("detailMessage")
              .isEqualTo("For input string: \"asdf\"");
  }
  </code></pre>
  
  <p>This fails most of the time, while this:</p>
  
  <pre class="lang-java prettyprint-override"><code>@Test
  public void test() {
      assertThatThrownBy(() -&gt; Stream.of("1", "2", "asdf").forEach(Integer::parseInt))
              .asInstanceOf(InstanceOfAssertFactories.type(NumberFormatException.class))
              .extracting("detailMessage")
              .isEqualTo("For input string: \"asdf\"");
  }
  </code></pre>
  
  <p>succeeds 100% of the time.</p>
  
  <p>Another thing is when the message is absent, it will be present in the cause of the exception.
  Ex:</p>
  
  <pre class="lang-java prettyprint-override"><code>@Test
  public void test() {
      assertThatThrownBy(() -&gt; Stream.of("1", "2", "asdf").parallel().forEach(Integer::parseInt))
              .asInstanceOf(InstanceOfAssertFactories.type(NumberFormatException.class))
              .extracting("cause.detailMessage")
              .isEqualTo("For input string: \"asdf\"");
  }
  </code></pre>
  
  <p>Any idea of how to make the parallel stream throw the exact and exception and not some sort of nested monster?</p>