[lit] Clean up internal diff's encoding handling
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.
Reviewed By: rnk
Differential Revision: https://reviews.llvm.org/D68664
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@375018
91177308-0d34-0410-b5e6-
96231b3b80d8