func StringKeySet(theMap interface{}) String {
	v := reflect.ValueOf(theMap)
	ret := String{}
	for _, keyValue := range v.MapKeys() {
		ret.Insert(keyValue.Interface().(string))
	}
	return ret
}
StringKeySet creates a String from a keys of a map[string](? extends interface{}).
If the value passed in is not actually a map, this will panic.
package sets
import (
	"reflect"
	"sort"
)
type String map[string]Empty
func NewString(items ...string) String {
	ss := String{}
	ss.Insert(items...)
	return ss
}