func combinations(items map[string][]interface{}) []map[string]interface{} {
	keys := []string{}
	for key := range items {
		keys = append(keys, key)
	}
	sort.Strings(keys)
	return combiner(map[string]interface{}{}, keys, items)
}
combinations takes input in the form of a map of item lists, and returns a
list of all combinations of each item for each key. E.g.:

{"foo": [1, 2, 3], "bar": [4, 5, 6]}

Will return the following maps:

{"foo": 1, "bar": 4}
{"foo": 1, "bar": 5}
{"foo": 1, "bar": 6}
{"foo": 2, "bar": 4}
{"foo": 2, "bar": 5}
{"foo": 2, "bar": 6}
{"foo": 3, "bar": 4}
{"foo": 3, "bar": 5}
{"foo": 3, "bar": 6}
package main
import (
	"math/rand"
	"sort"
	"github.com/mroth/weightedrand"
)