Improve the matching logic.

- If Row 1 and Row 2 matched on the Email1 field, and Row 2 and Row 3
matched on the Email2 field, all three rows should have the same ID.
Before this commit, Row 2 and 3 would have the same ID, but not Row 1.
- Key generation logic is moved into RowMatches.
- Instead of generating a new key for every pair, it only generates
a new key if it hasn't previously generated a key for either row in
the pair. This solves the problem.
- Added a new example (input3.csv) that contains this case.