///
/// A tree that allows one-time iteration over all nodes and their children, consuming it in the process,
/// while being shareable among threads without a lock.
/// It does this by making the guarantee that iteration only happens once.
///
///
/// Types associated with [Tree].
// kept in separate module to encapsulate unsafety (it has field invariants)