Many changes:
- Probabalistic matching now on a field-by-field basis rather than lumping all tokens into one
- Search algorithm can now account for scores of matches found, stopping when a good match is detected
- Better scoring algorithm that accounts for tokens which don't match and misspellings
- Memoisation to improve performance