code: function Flowa(flow, name) {
  
    /**
     * A name for the flow
     * @type {String}
     */
    this.name = typeof name == 'undefined' ? null : name;
  
    /**
     * The root task
     * @type {Object}
     */
    this._root = flow;
  
    /**
     * Tasks indexed by their names
     * @type {Object}
     */
    this._tasks = {};
  
    /**
     * Runners types and their handlers
     * @type {Object}
     */
    this._runners = {serial: serial, parallel: parallel};
  
    /**
     * The name of the root task
     * @type {Symbol}
     */
    this._rootName = Symbol('__root__');
  
    /**
     * A mapping between tasks names and runners types
     * @type {Object}
     */
    this._tasksRunnersTypes = {};
  
    /**
     * A mapping between tasks names and their depth
     * @type {Object}
     */
    this._tasksDepths = {};
  
    /**
     * A mapping between tasks names and their parent task's name
     * @type {Object}
     */
    this._tasksParents = {};
  
    /**
     * The default runner type
     * @type {String}
     */
    this._defaultRunnerType = 'serial';
  
    /**
     * Initialize the Flowa object
     */
    this._init();
  
  }
docs: Flowa
  
  @param {Object} flow
  @param {String} name (Optional)