Sparse vectors

These are vectors that grow as large as they need to. That is, they
can be indexed by arbitrarily large nonnegative integers. The
implementation allows for arbitrarily large gaps by arranging the
entries in a tree. They are in the structure sparse-vectors.

(make-sparse-vector) -> sparse-vector

(sparse-vector-ref sparse-vector k) -> value

(sparse-vector-set! sparse-vector k value)

(sparse-vector->list sparse-vector) -> list

Make-sparse-vector, sparse-vector-ref, and
sparse-vector-set! are analogous to make-vector,
vector-ref, and vector-set!, except that the indices
passed to sparse-vector-ref and sparse-vector-set! can
be arbitrarily large. For indices whose elements have not been set in
a sparse vector, sparse-vector-ref returns #f.

Sparse-vector->list is for debugging: It returns a list of the
consecutive elements in a sparse vector from 0 to the highest element
that has been set. Note that the list will also include all the
#f elements for the unset elements.