wrapN returned the whole remaining string whenever the first word did not
fit the description column, which ended the wrapping loop in wrap and left
every later word on that one line.
Break after the over-wide word instead, so only that word overflows and
wrapping resumes on the next one. Searching for the break point from i
covers both cases the old guard caught: no whitespace before i at all, and
whitespace only at index 0 where splitting would emit an empty line.
Fixes#501