code: function (keyColumn, valueColumn, cb) {
              var map = {}, args = comb.argsToArray(arguments);
              cb = isFunction(args[args.length - 1]) ? args.pop() : null;
              var k = this.__hashIdentifierToName(keyColumn),
                  v = this.__hashIdentifierToName(valueColumn);
              return this.select.apply(this, args).map(function (r) {
                  map[r[k]] = v ? r[v] : r;
              }).chain(function () {
                  return map;
              }).classic(cb).promise();
          }
docs: Returns a promise resolved with a hash with keyColumn values as keys and valueColumn values as
  values.  Similar to {@link patio.Dataset#toHash}, but only selects the two columns.
  
  @example
  // SELECT id, name FROM table
  DB.from("table").selectHash("id", "name").chain(function(hash){
  // e.g {1 : 'a', 2 : 'b', ...}
  });
  
  @param {String|patio.sql.Identifier\patio.sql.QualifiedIdentifier|patio.sql.AliasedExpression} keyColumn the column
  to use as the key in the hash.
  
  @param {String|patio.sql.Identifier\patio.sql.QualifiedIdentifier|patio.sql.AliasedExpression} valueColumn the column
  to use as the value in the hash.
  
  @param {Function} [cb] the callback to invoke when the action is done.
  
  @return {comb.Promise} a promise that is resolved with an array of hashes, that have the keyColumn
  as the key and the valueColumn as the value.