Value Object Semantics in Ruby What is the correct behavior of hash, ==, eql? and equal? for value objects?