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.
Yes, we should name things carefully.  A name which says "the tip of this list is null" communicates to someone reading the code that we start with the entry given and go find its tip, then see whether that's null.  We do not such thing.  Whether the given entry is the tip, tail, top, bottom or anything else is not relevant to what the function tests.

When first I read the code, I understood "tip" to mean the end of the list.  That mislead me, leading to confusion when I saw how the function was used.  I anticipate that other readers of the code are likewise apt to be mislead by such a name; whereas "EntryIsCfNull" would have been clear.  Nomenclature bugs lead to cognitive bugs in the heads of developers, which cause real run-time bugs in code - which can be very hard to find, because someone reading the code with the bug in it can be mislead by the nomenclature.

It may be "obvious" to you that "tip" means "head" - albeit, in that case, why not use the conventional term "head" ? - but it most certainly wasn't to me.
There are lots of places where a word can be ambiguous but each person has one meaning of it that they take by default; they typically consider this default to be "obvious" and consequently completely fail to understand why others (with a different default, that seems equally "obvious" to them) get confused by their use of the word.  The use of "tip" here would appear to be an example.  Such words are best avoided or clarified.  In the present case, the reference to the entry being the "tip" is in any case irrelevant, so avoiding the possible source of confusion is best.

Also: you say that an Rlist entry is implicitly a head.  This is kinda true in a limited sense, but if an Rlist entry is in fact the `->next` or some other, you'd better not try prepending to it - or you'll create a pair of Rlists with a common tail; trying to delete either shall cause horrible consequences, as shall quite a few other operations (e.g. reverse one of them, reverse the other, watch a memory leak happen).  So it isn't good practice to think of every Rlist element as a "head"; actually, some Rlist elements truly are independent heads of lists - there is no other that has `->next` pointing at these - and all others are subordinate entries of these.