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.
I think it'd be better to use a different example for unreachable!(). In this one `unreachable!()` is used to work-around a compiler limitation and if I didn't know that when reading this, I'd be very confused by what it is you mean by `something very, very wrong`.

I'll try to be constructive and come up with a better example but essentially anything where `unreachable!()` specifies an invariant in the control flow that's not encoded in the types would do, I think.