factor init_banner_warnings() out of init_banner().
check the output FILE for ttyness, and only emit control
sequences when it is indeed a tty. this eliminates some
control sequences that were being dumped when stderr was
redirected.
Previously, the quadblitter compared the external two pixels
against the two lerps, and if the closest was closer to the
primary lerp than the secondary, trilerped the closest with
the primary pair. Instead, calculate the total RGB distance,
and for whichever external pixel is closer to the primary
lerp, calculate the trilerp and the new candidate difference.
if the candidate difference is less than the total distance,
select it and perform the trilerp. This improves upon the
"twinkling problem" described in #1354, though it does not
entirely resolve it. Performance change is negligible. Add a
unit test for this change.
notcurses_stats() and notcurses_stats_reset() now take the
new statlock member, as do stat modifications from render,
raster, writeout, resize, plane creation, and plane
destruction. Add nonnull attributes to stats API. Initialize
and destroy statlock as part of notcurses struct. Update
documentation. Free pilelock on error paths. Closes#1139.
Stats: preserve planecount across reset_stats(), since it is
an instantaneous (rather than cumulative) stat. Properly
initialize plane count to 0 in notcurses_init().
Banners: print min/avg/max rather than min/man/avg. Don't
predivide maximum byte output; it reduces accuracy.