A simple Result type for Python 3 inspired by Rust, fully type annotated.
The idea is that a result value can be either `Ok(value)` or `Err(error)`, with
a way to differentiate between the two. `Ok` and `Err` are both classes
encapsulating an arbitrary value. `Result[T, E]` is a generic type alias for
`typing.Union[Ok[T], Err[E]]`.