Implement hash and isEqual: methods.

Hmm, not sure this is good, I think you should hash something even if not set, but I'm not 100%.

Otherwise a struct with
field1: 1
field2: unset

vs

field1 unset
field2: 1

Would hash the same right?