runCommand function, and async.waterfall
make sure callback is always the last arg to async functions