async/waterfall function runner