anchor.diff:      ret.[0] <- newPath(level - 5,node) :> obj
       ret
   
  -let rec pushTail(vector,level,parent:Node,tailnode) =
  +let rec pushTail(vector:TransientVector<'a>,level,parent:Node,tailnode) =
       //if parent is leaf, insert node,
       // else does it map to an existing child? -> nodeToInsert = pushNode one more level
       // else alloc new path
  
positive.code:         if i >= vector.TailOff then
              let newTail = Array.copy vector.Tail
              newTail.[i &&& 0x01f] <- x :> obj
              transientVector(vector.Count, vector.Shift, vector.Root, newTail)
          else
              transientVector(vector.Count, vector.Shift, doAssoc(vector.Shift, vector.Root, i, x), vector.Tail)
      elif i = vector.Count then
          cons x vector
      else raise Exceptions.OutOfBounds
  
negative.code: 
  let emptyNode = newNode()
  
  type TransientVector<'a> (count,shift,root,tail) = 
      let tailOff = 
          if count < 32 then 0 else
          ((count - 1) >>> 5) <<< 5
      with
          member this.Count = count
          member internal this.Shift = shift
          member internal this.Root = root
          member internal this.Tail = tail
          member internal this.TailOff = tailOff
  
  let inline count (vector:TransientVector<'a>) = vector.Count
  
  let empty<'a> = TransientVector<'a>(0,5,emptyNode,[||])
  
  let rec newPath(level,node:Node) =
      if level = 0 then node else
  