Everytime we create a new key we increment usedBy on every label that is included in that key. Every time the weak key is garbage collected (checked in cleanup func) we decrement usedBy. When usedBy reaches zero it means nobody uses the label and we can safely remove it and remove the key.
The key can decompress itself using unsafe pointer dereference, see Key.Decompress func.
This is basically a workaround for missing slice comparable customization. Once go has one the code could be simplified a lot.