Redmine/6553: Fix implicit looping over multiple lists

Pull request for initial review of the changes to the code. Planning to add more test coverage to the acceptance test before merging.
On the other hand, precisely because it's a pure forward-linked list, "here" in an Rlist is just a particular running-position down the list - and this, indeed, is exactly how you use it, you call it on positions that are not the head of their pertinent lists - so there is nothing about the passed entry that labels it as a "tip"; every position on a list looks the same *except the last*.  If a function is passed the head of a list and acts on all later elements, then it's treating the element passed as a head.  Otherwise, the only "tip" a list has its its *tail*, the last element, which isn't what we're dealing with here.  Or, to put it another way, if the "end" of a list that "tip" is here referring to is the head, then it is so only in the sense that *every* entry in the list is the head (of a final portion of whatever list it appears in) and so you're using "tip" as a synonym for "entry" - where calling it an entry would not call attention to the irrelevant fact that it can be construed as an end of a list.

In any case, "being at an end" is not a feature of the list element passed in this function, whether that end be the head or the tail; so the function name should not mention this irrelevancy.  This is a test for whether an entry (at an arbitrary position in an Rlist, including both head and tail) is a null entry, which has nothing to do with its position in the list.