code: function loadCheckbuildConf(filePath, f) {
      var conf;
      try {
        conf = shjs.cat(filePath);
      } catch (err) {
        return f(['Could not open `%s`', filePath, err]);
      }
  
      try {
        conf = JSON5.parse(conf);
      } catch (err) {
        return f(['Invalid json content inside `%s`', filePath, err]);
      }
  
      /**
       * Load and apply extends
       */
      function extendConf(conf, f) {
        if (_.isArray(conf.extends)) {
          async.reduce(conf.extends, conf, function(res, filePath, cb) {
            loadCheckbuildConf(filePath, function(err, conf) {
              /**
               * Do almost like _.defaultsDeep, but without merging arrays
               */
              function defaultsDeep(config, defaults) {
                if (_.isPlainObject(config)) {
                  return _.mapValues(_.defaults(config, defaults), function(val, index) {
                    return defaultsDeep(_.get(config, index), _.get(defaults, index));
                  });
                }
  
                return config || defaults;
              }
  
              cb(err, defaultsDeep(res, conf));
            });
          }, f);
        } else {
          f(null, conf);
        }
      }
  
      if (_.isArray(conf.urls)) {
        // Download distant files
        async.each(conf.urls, downloadDistantOrLoad, function(err) {
          if (err) {
            return f(['An error occured when loading distant files', err]);
          }
  
          extendConf(conf, f);
        });
      } else {
        extendConf(conf, f);
      }
    }
docs: Load the proper checkbuild conf (using extends & urls)
  @param  {string} filePath  Conf path
  @param  {function} f       Callback:  f(err, conf)