Error handling guide

Now that we've done `fail` -> `panic`, I feel bringing back the error handling guide is a good idea. We had one long ago, but it was removed when conditions were removed.

This doesn't cover the new FromError stuff, but I feel like it's already useful in this state, so I'm sending this PR now.
Most likely not, it'd after all require incorporating a complete SMT solver the way Liquid Haskell does and it'd only work for some subset of Rust. From the user's perspective it still, however, a compiler limitation. Maybe it is useful to mention this `unreachable!()` use case separately, though. :)