index.js
function forEach() {
	var self = this;

	argy(arguments)
		.ifForm('', function() {})
		.ifForm('array function', function(tasks, callback) {
			self._struct.push({ type: 'forEachArray', payload: tasks, callback: callback });
		})
		.ifForm('object function', function(tasks, callback) {
			self._struct.push({ type: 'forEachObject', payload: tasks, callback: callback });
		})
		.ifForm('string function', function(tasks, callback) {
			self._struct.push({ type: 'forEachLateBound', payload: tasks, callback: callback });
		})
		.ifForm('number function', function(max, callback) {
			self._struct.push({ type: 'forEachRange', min: 1, max: max, callback: callback });
		})
		.ifForm('number number function', function(min, max, callback) {
			self._struct.push({ type: 'forEachRange', min: min, max: max, callback: callback });
		})
		.ifForm('string array function', function(output, tasks, callback) {
			self._struct.push({ type: 'mapArray', output: output, payload: tasks, callback: callback });
		})
		.ifForm('string object function', function(output, tasks, callback) {
			self._struct.push({ type: 'mapObject', output: output, payload: tasks, callback: callback });
		})
		.ifForm('string string function', function(output, tasks, callback) {
			self._struct.push({ type: 'mapLateBound', output: output, payload: tasks, callback: callback });
		})
		.ifFormElse(function(form) {
			throw new Error('Unknown call style for .forEach(): ' + form);
		});

	return self;
}
function forEach() {
	var self = this;

	argy(arguments)
		.ifForm('', function() {})
		.ifForm('array function', function(tasks, callback) {
			self._struct.push({ type: 'forEachArray', payload: tasks, callback: callback });
		})
		.ifForm('object function', function(tasks, callback) {
			self._struct.push({ type: 'forEachObject', payload: tasks, callback: callback });
		})
		.ifForm('string function', function(tasks, callback) {
			self._struct.push({ type: 'forEachLateBound', payload: tasks, callback: callback });
		})
		.ifForm('number function', function(max, callback) {
			self._struct.push({ type: 'forEachRange', min: 1, max: max, callback: callback });
		})
		.ifForm('number number function', function(min, max, callback) {
			self._struct.push({ type: 'forEachRange', min: min, max: max, callback: callback });
		})
		.ifForm('string array function', function(output, tasks, callback) {
			self._struct.push({ type: 'mapArray', output: output, payload: tasks, callback: callback });
		})
		.ifForm('string object function', function(output, tasks, callback) {
			self._struct.push({ type: 'mapObject', output: output, payload: tasks, callback: callback });
		})
		.ifForm('string string function', function(output, tasks, callback) {
			self._struct.push({ type: 'mapLateBound', output: output, payload: tasks, callback: callback });
		})
		.ifFormElse(function(form) {
			throw new Error('Unknown call style for .forEach(): ' + form);
		});

	return self;
}
Run an array/object though a function
This is similar to the async native .each() function but chainable