Improve value_object's #hash uniformity

Array#hash is designed to be uniform, unlike reduce(:^).hash

```ruby
class Point
  include Virtus.value_object
  values do
     attribute :x, Integer
     attribute :y, Integer
  end
end

Point.new(x: 1, y: 1).hash == Point.new.hash # was true
Point.new(x: 1).hash == Point.new(y: 1).hash # was true
```