I found that it was quite common to want to trigger task failure, much more so than I originally realized. I also found that all contexts have some form or notion of failure, although it's not always task failure.

For example, any of these operations can fail:

* `Option::unwrap`
* `Result::unwrap`
* integer division
* indexing a vector
* indexing a string

There's a bunch of others throughout the methods in libcore. Consumers of libcore also really want to fail such as liballoc, libcollections, etc. It ended up being common enough that I found it a core enough concept to *declare* in libcore, but not *define* in libcore.