I think we need a nice, big comment around here that explains how the pump works.  Something along the lines of:

```javascript
// The data pump flows as follows:
//  1) splitlines() reads char-by-char to split the text into lines
//  2) each line is parsed to parseEntries() when we have accumulated enough lines to represent CONCURRENCY cards.
//  3) call post() for each contact found by parseEntries()
//  4) perform matching for each contact
//  5) save the contact if appropriate
//  6) call onParsed() which either goes back to (4) for the next contact or goes back to (1) to get the next set of lines
//
// Note:  The async callbacks in the matching and mozContacts.save() code prevent this code from being purely recursive.
```