code: function series(tasks) {
      if (tasks == null) return promisen([]);
      var stack = [];
      var result = [];
      tasks = Array.prototype.map.call(tasks, wrap);
      tasks = waterfall(tasks);
      return waterfall([push(stack), tasks, result]);
  
      // apply the first argument only. ignore rest.
      function wrap(task) {
        return waterfall([top(stack), task, push(result)]);
      }
    }
docs: creates a promise-returning function which runs multiple tasks in order.
  
  @class promisen
  @static
  @function series
  @param tasks {Array|Array-like} list of tasks
  @returns {Function} promise-returning function
  @example
  var promisen = require("promisen");
  
  // generate a promise-returning function
  var task = promisen.series([task1, task2, task3,...]);
  
  // execute it
  task(value).then(function(array) {...}); // array of results
  
  // execute it with target object which is passed to every tasks
  task.call(target, value).then(function(result) {...});