Trait-based exception handling

After a detour through thinking about [first-class checked exceptions](https://github.com/glaebhoerl/rust-notes/blob/268266e8fbbbfd91098d3bea784098e918b42322/my_rfcs/Exceptions.txt), I've now circled back around and convinced myself that @aturon's [original idea](https://github.com/rust-lang/rfcs/pull/204) of an `?` operator for propagating exceptions is actually brilliant and the perfect middle path. But I also want `try`..`catch`.

[CLICKME](https://github.com/glaebhoerl/rfcs/blob/trait-based-exception-handling/active/0000-trait-based-exception-handling.md)
To me that syntax looks like if-let..else, and implies no guarantee of catching all cases. Catch should handle all variants---the alternative gives me bad memories of Java's `RuntimeException`.