(PUP-1029) Make iterative functions more consistent 

This makes the API and implementation of the iterative functions more consistent. The filter function did not support using index/value, key/value, and all of the functions needed to deal with the recipient type. Now there is a common Enumeration class to get the enumerator. Most of the iterative functions now only needs to deal with
Hash being special in some cases. 

As a bonus this also adds support for iterating from 0-n on an integer value, and to iterate over chars in a string (each char becoming a single char string).