_minimize() is weird in that it changes a_lines and b_lines but
leaves base_lines unchanged, which means they'll be
inconsistent. That was fine because the caller never used
base_lines. With the recent refactorings of this code, we can now
make this function cleaner by having it minimize a single conflict and
not care about base_lines.
This also makes the code simpler and makes the code for each
render_*() function more similar.