func MultiSort(fns ...LessFn) LessFn {
	return func(s, t Track) bool {
		for _, fn := range fns[:len(fns)-1] {
			switch {
			case fn(s, t):
				return true
			case fn(t, s):
				return false
			}
		}
		return fns[len(fns)-1](s, t)
	}
}
MultiSort creates a LessFn for tracks using the given LessFns.
package index
import "sort"
type LessFn func(s, t Track) bool
type trackSlice struct {
	fn     LessFn
	tracks []Track
}
func (o *trackSlice) Len() int           { return len(o.tracks) }
func (o *trackSlice) Swap(i, j int)      { o.tracks[i], o.tracks[j] = o.tracks[j], o.tracks[i] }
func (o *trackSlice) Less(i, j int) bool { return o.fn(o.tracks[i], o.tracks[j]) }
func Sort(tracks []Track, f LessFn) {
	o := &trackSlice{f, tracks}
	sort.Sort(o)
}
func SortByString(field string) LessFn {
	return func(s, t Track) bool {
		return s.GetString(field) < t.GetString(field)
	}
}
func SortByInt(field string) LessFn {
	return func(s, t Track) bool {
		return s.GetInt(field) < t.GetInt(field)
	}
}
func SortByTime(field string) LessFn {
	return func(s, t Track) bool {
		return s.GetTime(field).Before(t.GetTime(field))
	}
}