Don't swallow newlines from the source text.

Newlines were lost because of the way the source text was split. In some cases
this even resulted in missing text in the result diff.
Don't ignore valid inserts after doing a word level diff.

Inserted elements were ignored after a complicated change on one line was
detected. Sometimes these inserts weren't the mirror insert of a delete
so they can't be ignored.

This is basically a quick workaround to check if the original delete is the
mirror of the insert. In cases with repeating patterns this can still go
wrong.

I don't think there is a mathematically valid way to solve this problem with
the LCS algorithm and callbacks, let's see where this takes us for now.