sjl.js
function forEach (arrayLike, callback, context) {
        var classOfArrayLike = sjl.classOf(arrayLike);
        switch (classOfArrayLike) {
            case _Array:
            case 'Set':
            case 'SjlSet':
            case 'SjlMap':
            case 'Map':
                arrayLike.forEach(callback, context);
            break;
            case _Object:
                forEachInObj(arrayLike, callback, context);
            break;
            default:
                throw new TypeError('sjl.forEach takes only ' +
                    '`Array`, `Object`, `Map`, `Set`, `SjlSet`, and `SjlMap` objects.  ' +
                    'Type passed in: `' + classOfArrayLike + '`.');
        }
    }
function forEach (arrayLike, callback, context) {
        var classOfArrayLike = sjl.classOf(arrayLike);
        switch (classOfArrayLike) {
            case _Array:
            case 'Set':
            case 'SjlSet':
            case 'SjlMap':
            case 'Map':
                arrayLike.forEach(callback, context);
            break;
            case _Object:
                forEachInObj(arrayLike, callback, context);
            break;
            default:
                throw new TypeError('sjl.forEach takes only ' +
                    '`Array`, `Object`, `Map`, `Set`, `SjlSet`, and `SjlMap` objects.  ' +
                    'Type passed in: `' + classOfArrayLike + '`.');
        }
    }
For each for array like objects.
@function module:sjl.forEach
@param arrayLike {Array|Set|SjlSet|SjlMap|Map}
@param callback
@param context