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.
Let 'o' expand/collapse folded text.
Let tags intrude into subject in thread display.
Put standard tags into a common structure.
Revert "Remove hack that stops drawing one column early."

This reverts commit 1d4fd7078c586df59efcadc72a0b7178e9609015.
Draw the space preceding a tag in the same call as the tag.

This prevents drawing the space then finding out there is no room for
the tag, leading to a situation where the space would clobber the
subject text in the penultimate column, but the first character of the
tag would not clobber the final column.
text_entry: Move remaining state into info type.
text_entry: Support undo.
Replying to an e-mail marks it as read
Change yellow/red to reversed

I prefer my colors this way
Make separation bars white on black

I don't like the blue background. I'd ideally want to use something like
gray for this but it ncursesw doesn't seem to support any colors other
than the basic ones it defines. I wonder how other applications do it?
Change URLs to green

I like this, more consistent with my vim layout and magenta makes
everything seem too angry (when combined with red for spelling mistakes)