improvements

- allocate fixed temporary array that can hold a single substring for
  each token in the corpus
- delay cartesian products of source x target substrings until results
  are stored in table
- remove mapping of substrings to integers