code: function runCommand(name, args, options, cb, stdoutHandler, stderrHandler) {
  	//if we dont actually have stdout and stderr, try to get the cb
  	//if there was no callback passed, used a default
  
  	options = options || { cwd : cwd, env: env };
  	var child = spawn(name, args, options);
  	if (cb) {
  		var out = null;
  		var err = null;
  		//we need to wait for process.exit, stdout.end, and stderr.end before
  		//we return
  		var waiting = 3;
  		var returnArgs = [];
  
  		var fire = function(index, arg) {
  			if (arg != null) {
  				returnArgs[index] = arg;
  			}
  			if (--waiting === 0) {
  				cb.apply(undefined, returnArgs);
  			}
  		};
  		//buffer stdout and stderr to pass to the completion callback
  		if (!stdoutHandler) {
  			out = '';
  			stdoutHandler = function(data) {
  				out += data;
  			};
  		}
  		if (!stderrHandler) {
  			err = '';
  			stderrHandler = function(data) {
  				err += data;
  			};
  		}
  		child.stdout.setEncoding('utf8');
  		child.stdout.on('data', stdoutHandler); 
  		child.stdout.on('end', function() {fire(1, out); });
  				
  		child.stderr.setEncoding('utf8');
  		child.stderr.on('data', stderrHandler);
  		child.stderr.on('end', function() {fire(2, err); });
  
  		child.on('exit', function(code) {
  			fire(0, code);
  		});
  	}
  
  	return child;
  
  }
docs: /*
  spawn a process to run the command name
  with commandline arguments args
  call cb on completion