save(callback, txn) {

    callback = callback || (() => {});
    let series = [];

    let newTransaction = !txn;
    if (newTransaction) {
      series = series.concat(
        cb => {
          this.constructor.transaction((err, newTxn) => {
            if (err) {
              cb(err);
            }
            txn = newTxn;
            return cb();
          });
        }
      );
    }

    if (!this.inStorage()) {
      this._isCreating = true;
    }

    series = series.concat([
      cb => this.__verify__(cb, txn),
      cb => this.beforeSave(cb, txn),
      cb => this.__save__(cb, txn),
      cb => this.afterSave(cb, txn)
    ]);

    async.series(series, (err) => {

      this._isCreating = false;

      if (newTransaction) {
        if (err) {
          console.log('ERROR IS?');
          console.log(err);
          return txn.rollback(txnErr => callback(err, this));
        }
        return txn.commit(txnErr => callback(txnErr, this));
      }

      return callback(err || null, this);

    });

  }
Save a model (execute beforeSave and afterSave)
@param {Function} callback Callback to execute upon completion
@param {Transaction} txn The SQL transaction used to execute this save method