Refactor common logic of insertion and deletion.
Refactor common logic of insertion and deletion.

At a glance it seems unnecessary and overly complex,
(indeed, this is messier then I expected),
but OrderedSkipList and SkipMap require more flexible list maniplations.

Without this refactor the old interfaces are too inflexible -- they
require caller to provide a closure with given signature, but those
data structures have different needs. For example, to support
OrderedSkipList I need to parameters to support value comparison, and I
need to constantly send the values currently being inserted to that
clusre... which is certainly not needed by SkipList.

Also SkipMap needs different logic for insertion. To support that
without this refactor, I would have to write SkipNode traversal logic
for an additional time. That would be very annoying.

JP-Ellis/rust-skiplist