Changed the skiplist implement to be an indexed skiplist. This'll allow for
efficient large offsets. To work propery though, we not only need to support
offset from the tail, but we also need to be able to offset from an arbitrary
node. (this last one is necessary when doing a range query and offseting)