We're still not doing an intersection...

I believe you should do something like (pseudo code):
```
results = {}
...
terms.forEach(function(term) {
  searchcontact(term, function(contacts) {
    results[term] = contacts;
    if (isComplete()) {
     callback(intersect(results));
    }
  });
});