pub fn next_kv(
        self,
    ) -> Result<
        Handle<NodeRef<BorrowType, K, V, marker::LeafOrInternal>, marker::KV>,
        NodeRef<BorrowType, K, V, marker::LeafOrInternal>,
    > {
        let mut edge = self.forget_node_type();
        loop {
            edge = match edge.right_kv() {
                Ok(kv) => return Ok(kv),
                Err(last_edge) => match last_edge.into_node().ascend() {
                    Ok(parent_edge) => parent_edge.forget_node_type(),
                    Err(root) => return Err(root),
                },
            }
        }
    }
Given a leaf edge handle into a dying tree, returns the next leaf edge
on the right side, and the key-value pair in between, which is either
in the same leaf node, in an ancestor node, or non-existent.

This method also deallocates any node(s) it reaches the end of. This
benchmarks/haystacks/code/rust-library.rs