Differentiate Hamster::List#== and Hamster::List#eql?

Implements `List#==`, which is less strict than `eql?`

```ruby
Hamster.list(1,2,3).eql?([1,2,3]) #=> false
Hamster.list(1,2,3) == [1,2,3] #=> true
[1,2,3] == Hamster.list(1,2,3) #=> true
```
 I've also reworked the equality tests, less meta programming, more shared examples.

Happy to get feedback on this.