As suggested by rnk at D67643#1673043, instead of reading files
multiple times until an appropriate encoding is found, read them once
as binary, and then try to decode what was read.
For Python >= 3.5, don't fail when attempting to decode the
diff_bytes output in order to print it.
Avoid failures for Python 2.7 used on some Windows bots by
transforming diff output with lit.util.to_string before writing it
to stdout.
Finally, add some tests for encoding handling.
try / except UnicodeDecodeError is an exciting code pattern, but I guess it's the existing behavior. :)