filter(source, fn) {
    return source.keys.reduce((acc, key) => {
      if (fn(source.byKey[key], key)) {
        acc.push(source.byKey[key]);
      }
      return acc;
    }, []);
  }
Filter source entires with given function and return array of entries matching the filter.

@param {object} source
@param {function} fn
@return {array}