oopsie 0.1.0-rc.4

Ergonomic, structured error handling: context selectors, traced errors, and rich colorized reports
Documentation
On a source field, opt in to forwarding diagnostic traces from that source through
this error type's `Diagnostic` impl. `backtrace` and `spantrace` are forwarded by
default; `location` is opt-in. A forwarded trace is read from the source rather than
captured here, so the wrapping type stores no trace of its own for it — keeping
nested errors small.

`location` is opt-in because the origin-most caller location is already captured at
construction, so this layer's own location field holds the leaf's site; forwarding it
instead reads the source's stored location.

If the source does not implement `Diagnostic` (e.g. `std::io::Error`), the forwarded
accessors return `None` — the wrapper keeps no trace and there is nothing to forward.

Forms: `forward`, `forward = true`, `forward = false`, `forward(true)`,
`forward(false)`, `forward(backtrace = …, spantrace = …, location = …)`.

### Example
```
use oopsie::{Contextual as _, Diagnostic as _};

#[oopsie::oopsie(traced)]
#[oopsie(module(false))]
pub enum LeafError {
    #[oopsie("leaf error")]
    Leaf,
}

#[oopsie::oopsie(traced)]
#[oopsie(module(false))]
pub enum WrapError {
    #[oopsie("wrap error")]
    Wrap {
        #[oopsie(forward)]
        source: LeafError,
    },
}

fn main() {
    let leaf = Leaf.build();
    let _: WrapError = Wrap.build_error(leaf);
}
```