Given a range of promises, resolve them one after another,
and return a promise which is fulfilled when all promises in range are fulfilled.
range may be a lazy range (e.g. a map which produces promises from other input),
which will cause the work to be started only when the previous promise completes.
Given a range of promises, resolve them one after another, and return a promise which is fulfilled when all promises in range are fulfilled. range may be a lazy range (e.g. a map which produces promises from other input), which will cause the work to be started only when the previous promise completes.