List/Vector/Set#reduce should not return nil if called with no block

Perhaps this was what Ruby 1.8.7 did. In 1.9+, if #reduce is called with no block,
the built-in Ruby collections use a string or symbol argument as the name of a method
to use as the reducer. I have amended the specs so they are compatible with the
Ruby 1.9+ behavior.
List/Vector/Set#maximum and #minimum use same comparator return values as built-in collections

Previously, when called with a block, Hamster's #min and #max expected the opposite
block return values as what Ruby's built-in collections expect.
List/Vector/Set#each_with_index return values match Ruby's built-in collections

The built-in collections (at least from 1.9+) return an Enumerator if called with
no block. If called with a block, they return self.
List/Vector/Set#find return values match Ruby's built-in collections
List/Vector/Set#partition return values with no block match built-in collections
Reintroduce Hamster::Enumerable, minus the bloat
Fix problem with Set#member?

Ruby's built-in collections, like Array, use #== for checking equality
in #include? and #member?. Hamster::Set uses #eql? (it's the only way
to implement it in a performant way). This makes Set#member? use #eql?,
just like Set#include? does.