func (i *BTreeIndex) Initialize(less LessFunction, keys <-chan string) {
	i.Lock()
	defer i.Unlock()
	i.LessFunction = less
	i.BTree = rebuild(less, keys)
}
Initialize populates the BTree tree with data from the keys channel,
according to the passed less function. It's destructive to the BTreeIndex.
package diskv
import (
	"sync"
	"github.com/google/btree"
)
type Index interface {
	Initialize(less LessFunction, keys <-chan string)
	Insert(key string)
	Delete(key string)
	Keys(from string, n int) []string
}
type LessFunction func(string, string) bool
type btreeString struct {
	s string
	l LessFunction
}
func (s btreeString) Less(i btree.Item) bool {
	return s.l(s.s, i.(btreeString).s)
}
type BTreeIndex struct {
	sync.RWMutex
	LessFunction
	*btree.BTree
}