get() {
    // This will create a new VTree and add to the pool if
    // we do not get one from the freeValues.
    const { value = shape(), done } = freeValues.next();

    // This extra bit of work allows us to avoid calling `free.values()` every
    // single time an object is needed.
    if (done) {
      freeValues = free.values();
    }

    free.delete(value);
    allocate.add(value);
    return value;
  }
Moves a VTree from the "free" state to the "allocated" state. If the pool
is empty, it creates a new object.

@return {VTree}