Only define each constant once for examples

This squashes the "already initialized constant" warnings.
Standardise on expect(&block).to raise_error
Use string interpolation in #instance_variable_set
Use a symbol argument to #instance_variable_set
Use Hash#values_at in .with
Inline local variable
Use Array#== to test fieldwise equality
Extract #values
Use a single condition in #eql?
Rename block parameter

"values" is a more obvious name.
Use Enumerable#zip in constructor
Use #values in #hash
Use Enumerable#map in #hash
Use Enumerable#inject in #hash
Remove unnecessary uses of return
Remove unnecessary uses of self