Work on all Enumerables, not just Array & Hash

* Instead of explicitly checking for Array and Hash, extend
  Enumerable directly
* When iterating in the producer, only special-case Hash-- everybody else can
  just deal with #each_with_index.