Fix PowerSet return values

Previously, calling `PowerSet()` on a `threadSafeSet` would return a `threadUnsafeSet` of `threadUnsafeSet`s. Now it returns a `threadSafeSet` of `threadSafeSet`s.
diff --git a/threadsafe.go b/threadsafe.go
index 002e06a..269b4ab 100644
--- a/threadsafe.go
+++ b/threadsafe.go
@@ -226,8 +226,14 @@
 
 func (set *threadSafeSet) PowerSet() Set {
 	set.RLock()
-	ret := set.s.PowerSet()
+	unsafePowerSet := set.s.PowerSet().(*threadUnsafeSet)
 	set.RUnlock()
+
+	ret := &threadSafeSet{s: newThreadUnsafeSet()}
+	for subset := range unsafePowerSet.Iter() {
+		unsafeSubset := subset.(*threadUnsafeSet)
+		ret.Add(&threadSafeSet{s: *unsafeSubset})
+	}
 	return ret
 }