anchor.diff:              let newRoot = newNode()
               newRoot.[0] <- vector.Root :> obj
               newRoot.[1] <- newPath(vector.Shift,tailNode) :> obj
  -            persistentVector<'a>(vector.Count + 1,vector.Shift + 5,newRoot,[| x |])
  +            PersistentVector<'a>(vector.Count + 1,vector.Shift + 5,newRoot,[| x |])
           else
               let newRoot = pushTail(vector,vector.Shift,vector.Root,tailNode)
  -            persistentVector<'a>(vector.Count + 1,vector.Shift,newRoot,[| x |])
  +            PersistentVector<'a>(vector.Count + 1,vector.Shift,newRoot,[| x |])
   
   
   let rec doAssoc(level,node:Node,i,x) =
  
positive.code:     ret.[subidx] <- nodeToInsert :> obj
      ret
  
  let inline arrayFor<'a> i (vector:PersistentVector<'a>) =
      if i >= 0 && i < vector.Count then
          if i >= vector.TailOff then vector.Tail else
              let node = ref vector.Root
  
negative.code:     ret.[0] <- newPath(level - 5,node) :> obj
      ret
  
  let rec pushTail(vector:PersistentVector<'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
  