Automatically compile aggregate stack traces for complex exceptions
Automatically compile aggregate stack traces for complex exceptions

Summary: Fixes T8156. I think this is a little simpler/cleaner than D12796 + D12851?

Test Plan:
With `--trace`:

```
[2015-05-25 08:28:38] EXCEPTION: (PhutilAggregateException) Some linters failed:
    - Exception: QUACK QUACK QUACK at [<arcanist>/src/lint/engine/ArcanistLintEngine.php:275]
arcanist(head=master, ref.master=9b7c6786cdc9), phutil(head=master, ref.master=65819efa43f1)
  #0 <#2> ArcanistPhutilXHPASTLinter::lintRaggedClasstreeEdges(XHPASTNode) called at [<arcanist>/src/lint/linter/ArcanistPhutilXHPASTLinter.php:269]
  #1 <#2> call_user_func(array, XHPASTNode) called at [<arcanist>/src/lint/linter/ArcanistPhutilXHPASTLinter.php:120]
  #2 <#2> ArcanistPhutilXHPASTLinter::resolveFuture(string, ExecFuture) called at [<arcanist>/src/lint/linter/ArcanistFutureLinter.php:34]
  #3 <#2> ArcanistFutureLinter::didLintPaths(array) called at [<arcanist>/src/lint/engine/ArcanistLintEngine.php:602]
  #4 <#2> ArcanistLintEngine::executeDidLintOnPaths(ArcanistPhutilXHPASTLinter, array) called at [<arcanist>/src/lint/engine/ArcanistLintEngine.php:553]
  #5 <#2> ArcanistLintEngine::executeLintersOnChunk(array, array) called at [<arcanist>/src/lint/engine/ArcanistLintEngine.php:481]
  #6 <#2> ArcanistLintEngine::executeLinters(array) called at [<arcanist>/src/lint/engine/ArcanistLintEngine.php:219]
  #7 ArcanistLintEngine::run() called at [<arcanist>/src/workflow/ArcanistLintWorkflow.php:331]
  #8 ArcanistLintWorkflow::run() called at [<arcanist>/scripts/arcanist.php:387]
```

Without `--trace`:

```
Exception
Some linters failed:
    - Exception: QUACK QUACK QUACK
(Run with `--trace` for a full exception trace.)
```

Reviewers: joshuaspence

Reviewed By: joshuaspence

Subscribers: epriestley

Maniphest Tasks: T8156

Differential Revision: https://secure.phabricator.com/D13007

julkiewicz/libphutil,julkiewicz/libphutil,julkiewicz/libphutil