This only updates to Go 1.21 baseline, which is what the module still
specifies as the minimum version. I'll need to run this again when
moving to Go 1.25 or 1.26 as minimum.
This fixes two issues:
1. Fragments with only context lines were accepted
2. Fragments with only a "no newline" marker caused a panic
The panic was found by go-fuzz. While fixing that issue, I
discovered the first problem with other types of empty fragments while
comparing behavior against 'git apply'.
Also extract some helper functions and modify the loop conditions to
clean things up while making changes in this area.