code: function getKey(obj, key, fn) {
    if (typeof obj === 'object') return fn(null, obj[key]);
    if (typeof obj === 'undefined') return fn(null, {});
    if (typeof obj !== 'function') return fn(new Error('cannot read conf:\n' + obj));
    if (obj.length === 2) return obj(key, fn);
    var val;
    try {
      val = obj(key);
    } catch(err) {
      return fn(err);
    }
    fn(null, val);
  }
docs: Lazily evaluate a key/value
  
  @param {Object|Function} obj
  @param {String} key
  @param {Function} fn