code: function arrayGroup (set, get, reduce) {
  
    //we can use a different lookup path on the right hand object
    //is always the "needle"
    function _compare (hay, needle) {
      for(var i in set) {
        var x = u.get(hay, set[i]), y = needle[i]
        if(x !== y) return compare(x, y)
      }
      return 0
    }
  
    return function (a, b) {
      if(a && !Array.isArray(a)) a = reduce([], a)
      var A = a = a || []
      var i = search(A, get.map(function (fn) { return fn(b) }), _compare)
  
      if(i >= 0) A[i] = reduce(A[i], b)
      else       A.splice(~i, 0, reduce(undefined, b))
  
      return a
    }
  }
docs: rawpaths, reducedpaths, reduce