code: function Terror(code, message) {
      var msg;
      var original;
  
      this.code = code == null ? Terror.CODES.UNKNOWN_ERROR : code;
  
      if (isString(message)) {
          msg = message;
      } else {
          msg = this.constructor.MESSAGES[this.code];
  
          if (isError(message)) {
              original = message;
          }
      }
  
      this.data = {};
      this.message = msg;
      this.originalError = original;
      this._isTerror = true;
      this._isLogged = false;
  
      return captureStackTrace(this, this.constructor);
  }
docs: @constructor
  @param {String|Number} [code=Terror.CODES.UNKNOWN_ERROR]
  @param {String} [message]
  @returns {Terror}
  @example
  ```
  var MyError = Terror.create('MyError', {
  MY_FAULT: "It\'s my own fault, because %reason%"
  });
  
  try {
  // dangerous code here
  } catch(err) {
  MyError.createError(MyError.CODES.MY_FAULT, err)
  .bind({ reason: 'something strange happens!' })
  .log();
  }
  
  // try to use Terror#ensureError if catched error can be Terror successor or not
  
  try {
  // dangerous code here
  } catch(err) {
  MyError.ensureError(err, MyError.CODES.MY_FAULT)
  .bind({ reason: 'i was sad when write code above' })
  .log();
  }
  
  // or simply log and throw Terror
  
  throw MyError.createError(MyError.CODES.MY_FAULT, { reason: 'i was too stupid!' })
  .log('warn');
  ```