Fix runaway argument with no token list

It turns out sometimes TeX doesn't print a token list after a
"runaway" error.  Handle this more robustly.
tests: Round-trip unusual bytes in test files
Use surrogateescape throughout LaTeX log handling

Previously, this used bytes rather than strings everywhere LaTeX
output was handled.  In addition to being annoying, the code wound up
decoding things willy-nilly when they had to be presented to the user
(e.g., error messages, exceptions, etc.), which tended to cause
UnicodeDecodeErrors if there was anything funny in the input.

Switch to using strings throughout the LaTeX output handling with
Python's surrogateescape error handling for all input and output.
This lets us correctly round-trip anything that appears in the LaTeX
output, while still treating its output as text.
Use surrogateescape throughout BibTeX log handling

As in the previous commit, but for BibTeX output.
More tasks