[RFC] Refactor buflist_findpat "two-iteration loop" anti-pattern

Another occurence of Issue #572. This code is much clearer but longer.
Couple of questions though:
* line 1731 - 1750: Even though the code is clearer, this still looks like something that should be replaced by a for loop?
* The infinite for loop (line 1730) could be replaced either by moving the above mentioned code into another method, or by using a goto statement (gasp). Would the first be preferable?
Don't you only want to do this if you switched it to `NUL`? i.e. you need the same if block as the place where you switched it?