An error: what went wrong at the root, and the context it was reported
through. A copy of one is the same error — a step’s failure kept with
what it built, and reported again with more context — so the backtrace
is shared, not captured again.
Something that can turn one GeopError into another, more-annotated one
— either a plain message (wrapped via GeopError::with_context) or a
callback that builds the wrapped error itself (e.g. to embed live state
captured at the call site). Lets WithContext::with_context accept
either .with_context("a message") or .with_context(&|e| ...).