チェインを完了し実行を開始します
@memberof Bucks
@instance
@param {function} [callback] 最終コールバック関数 ressは各チェインの実行結果の配列 ex) callback(err, res)
@param {function} [errback] callbackでエラーが発生した場合のハンドラ ex) errback(err)
function end(callback, errback) {
            if (callback && callback.length < 1) {
                // if callback specified, it should be `callback(err, ress)`.
                // errが無視されると発生したエラーがどこにも出ずにデバッグが難しくなるので
                // callbackには引数を1つ以上指定することを強制しています
                throw new Error('callback args length invalid. should be `callback(err, ress)` or `callback(err)`.');
            }

            var self = this;

            this.callback = callback;
            this.failure  = errback;

            if (!this._tasks || !this._tasks.length) {
                var err = new Error('task is empty. add(task) first. if theres no task to execute but end is desired, empty() may be useful');
                this.destroy(err, null);
                return callback(err);
            }

            // add as running
            Bucks.running[this.__id] = this;

            this._iterator(); //execute

            return undefined;
        }