Fix bugs in diff code.

The alignment code that writes the "diff-able" string, i.e., the string
that looks like the following, had a pretty fun bug in it.

FO- BAR --Z
FOO BAR BAZ

 The first bug was that I was allocating just enough memory for the
longest string: wrong. The maximum number of characters that one needs
to store such a string is the (size of str1 * size of str2). For large
strings, this quickly becomes unmanagable. So, my solution is to crawl
through the traceback matrix once to calcuate the number of "moves" in
the optimal solution, then allocate the memory to store the string, then
to build the "diff-able" string.