array.map without parallelism; like async.mapSeries but for promises