code: function getProp(propName) {
        var bindGetters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
        var bindTo = arguments.length > 2 ? arguments[2] : undefined;
        // $FlowFixMe
        var proto = Object.getPrototypeOf(this);
        var descriptor = Object.getOwnPropertyDescriptor(proto, propName);
        var result;
  
        if (!descriptor) {
          return null;
        }
  
        if (descriptor) {
          if (descriptor.initializer || descriptor.get) {
            var what = descriptor.initializer || descriptor.get;
  
            if (bindGetters) {
              result = what.bind(bindTo || this);
            } else {
              result = what;
            }
          } else if (descriptor.value) {
            result = descriptor.value;
          }
        }
  
        return result;
      }
docs: Properties defined for GraphQL types in Lattice can be defined as
  a getter, a function or an async function. In the case of standard
  functions, if they return a promise they will be handled as though
  they were async
  
  Given the variety of things a GraphQL type can actually be, obtaining
  its value can annoying. This method tends to lessen that boilerplate.
  Errors raised will be thrown.
  
  @instance
  @memberof GQLBase
  @method ⌾⠀getProp
  
  @param {string|Symbol} propName the name of the property in question
  @param {boolean} bindGetters true, by default, if the `get` or
  `initializer` descriptor values should be bound to the current instance
  or an object of the programmers choice before returning
  @param {mixed} bindTo the `this` object to use for binding when
  `bindGetters` is set to true.
  @return {mixed} the value of the `propName` as a Function or something
  else when the requested property name exists
  
  @throws {Error} errors raised in awaiting results will be thrown