Reimplement conversion of process output to valid UTF-8 string.

This version works on discontiguous input byte buffers instead of
producing a single, potentially invalid, string first then fixing it up.
It also handles embedded NULs (replacing them with U+FFFD) instead of
treating it as end of string.

This is more important if the process may return arbitrary binary data,
whereas the previous code really only expected text output.
Delete unused fix_utf8.
Group pager lines into tree representation.

This is a better way to implement the cycle alternatives command,
rather than keeping track of the number of lines in each part.
It will also make it easier to support new commands which change the
paged content, e.g. folding quoted text.
Add blank lines before part header lines in a post pass.

So we can avoid adding a blank line before a [-- content-type --]
line if the preceding line is in fact blank.
Improve handling of multipart/* parts in pager.

Now we show multipart/* head lines unless (1) we know it is not useful
to show, and (2) there are no alternatives for this current part.

In particular, I saw a message with structure:

  multipart/alternative
  + text/plain
  + multipart/related
    + text/html

Cycling alternatives on the text/plain part should show
a multipart/related part containing a text/html part.
The text/html part should have no alternatives.
Allow 'z' to toggle inline display of unsupported part content.
Limit number of invalid code units when expanding a part.

Rather than displaying a bunch of useless junk if 'z' is used to expand
a binary part, we display an error message instead.
Hide long blocks of quoted text.
Draw bullet in flat thread display.