Add a way to get broken promise cause.

Using .result will throw the exception if the promise was broken; this
provides a way for getting hold of it if needed.
Promise breakage should carry over to combinators.
A channel can be finished or failed.

While some may be "forever", this provides for channels that come to
some kind of conclusion, either a happy ending or a sad ending.