make nil a valid set and improve thread-safety

inline defers of Unlock
make everything thread-safer (consider Set t, too - and keep the lock when doing multiple operations)
make nil a valid set (nil represents an empty set, with potential problems in Merge and Add)
... down to line 214, there I stopped...

This was written in the github editor, I did not have a look at your tests and did not try to run this beforehand...
It's more an advice of things to consider than a full pull request.