code: function Principal(type, id, name) {
      if (!(this instanceof Principal)) {
          return new Principal(type, id, name);
      }
      this.type = type;
      this.id = id;
      this.name = name;
  }
docs: This class represents the abstract notion of a principal, which can be used
  to represent any entity, such as an individual, a corporation, and a login id
  @param {String} type The principal type
  @param {*} id The princiapl id
  @param {String} [name] The principal name
  @returns {Principal}
  @class