async function each(obj, func) {
        var result = createSequence();

        for (var key in obj) {
            var func_args = hofFuncArgs(func, obj[key], key, obj);
            // invoke func
            var val = await func.apply(this, func_args);
            if(typeof val !== 'undefined') {
                result.push(val);
            }
        }

        return result;
    }
@param {*} obj - the input object to iterate over
@param {*} func - the function to apply to each key/value pair
@returns {Array} - the resultant array