code: func (t *BTree) Clone() (t2 *BTree) {
  	// Create two entirely new copy-on-write contexts.
  	// This operation effectively creates three trees:
  	//   the original, shared nodes (old b.cow)
  	//   the new b.cow nodes
  	//   the new out.cow nodes
  	cow1, cow2 := *t.cow, *t.cow
  	out := *t
  	t.cow = &cow1
  	out.cow = &cow2
  	return &out
  }
docs: // Clone clones the btree, lazily.  Clone should not be called concurrently,
  // but the original tree (t) and the new tree (t2) can be used concurrently
  // once the Clone call completes.
  //
  // The internal tree structure of b is marked read-only and shared between t and
  // t2.  Writes to both t and t2 use copy-on-write logic, creating new nodes
  // whenever one of b's original nodes would have been modified.  Read operations
  // should have no performance degredation.  Write operations for both t and t2
  // will initially experience minor slow-downs caused by additional allocs and
  // copies due to the aforementioned copy-on-write logic, but should converge to
  // the original performance characteristics of the original tree.