If this api and the simplicity are hard requirements for you, the code can be adapted - but it won't be easy and I don't have the time for it in the forseeable future.
First, here's my reasoning for the change:
`nil` never has to be synchronized and is always consistent, which makes it an ideal starting point for an empty set. Also, it's pretty small and basic and requires no allocations.
Using the previous api, passing nil - which is still possible - would lead to a panic. Also, non-nil empty sets require a lot more synchronization and care to keep the thread-safety (really, a lot!).
If I were you, I would make all functions mutating the set unexported and change the public api to a pure functional style. That way you could even get rid of ALL synchronizations and still keep this valid and threadsafe - without any problems or special cases.
I'm afraid I'll have to drop this if you don't want it (and I guess you don't). But I still hope this was not wasted and you can reuse some patterns I used here!