function forEach( str, clbk, thisArg ) {
	var len;
	var idx;
	var brk;

	len = str.length;
	idx = 0;
	while ( idx < len ) {
		brk = nextGraphemeClusterBreak( str, idx );
		if ( brk === -1 ) {
			brk = len;
		}
		clbk.call( thisArg, str.substring( idx, brk ), idx, str );
		idx = brk;
	}
	return str;
}
Invokes a function for each grapheme cluster (i.e., user-perceived character) in a string.

@param {string} str - input string
@param {Function} clbk - function to invoke
@param {*} [thisArg] - execution context
@returns {string} input string

@example
function log( value, index ) {
    console.log( '%d: %s', index, value );
}

forEach( 'Hello', log );