code: function sequence(streamProviders) {
      const result = es.through();
      function pop() {
          if (streamProviders.length === 0) {
              result.emit('end');
          }
          else {
              const fn = streamProviders.shift();
              fn()
                  .on('end', function () { setTimeout(pop, 0); })
                  .pipe(result, { end: false });
          }
      }
      pop();
      return result;
  }
docs: We're doing way too much stuff at once, with webpack et al. So much stuff
  that while downloading extensions from the marketplace, node js doesn't get enough
  stack frames to complete the download in under 2 minutes, at which point the
  marketplace server cuts off the http request. So, we sequentialize the extensino tasks.