Ckozak/productcontent pk violation

Because products store a HashSet of ProductContent objects, a bad
hash function caused hibernate to miss updating/removing
some ProductContents