MRTKABARGGOWA764OGWFHMD26U5SHQCWBRXPZDC4HDCQ2I4RPT3QC
// There are three classes of behaviour, depending on whether the segment is the first, mid, or
// last, so we classify these on construction.
/// A KeyPath it used to follow keys into a keytree.
/// A `KeyPath` is used to follow keys into a keytree. Think of `KeyPath` as an iterator with a
/// double window looking into a (parent segment, child segment).
// A Token represents a parsed line of a keytree string. It contains a pointer to its `next`
// sibling. A `KeyValue` token contains a `Vec` of its children, the first value of the tuple is
// the child token's key. The second value is the tokens index in the `KeyTree` struct. The `line`
// field locates the error in the original keytree string and is passed on to errors.