A trait for exceptions which, for efficiency reasons, do not
fill in the stack trace.

A trait for exceptions which, for efficiency reasons, do not
fill in the stack trace. Stack trace suppression can be disabled
on a global basis via a system property wrapper in
scala.sys.SystemProperties.

This class differs from scala.util.Try in that it focuses on composing exception handlers rather than
composing behavior. All behavior should be composed first and fed to a Catch object using one of the
opt or either methods.

Methods exported by this object implement tail calls via trampolining.
Tail calling methods have to return their result using done or call the
next method using tailcall. Both return a TailRec object. The result
of evaluating a tailcalling function can be retrieved from a Tailrec
value using method result.
Implemented as described in "Stackless Scala with Free Monads"
http://blog.higher-order.com/assets/trampolines.pdf