Merge two FLs (say L and R), starting in a common context. The result is a
FL starting in the original end context of L, going to a new context that is
the result of applying all patches from R on top of patches from L.

While this function is similar to mergeFL, there are three important
differences to keep in mind:

mergeFL does not correctly deal with duplicate patches whereas this one
does
(Question from Eric Kow: in what sense? Why not fix the mergeFL instance?)

mergeFL returns both paths of the merge diamond, but this version only
returns one, so you'd better choose the order carefully, eg.
(merge2FL l r)

The conventional order we use in this function is reversed from
mergeFL (so mergeFL r l vs. merge2FL l r. This does not
matter so much for the former since you get both paths.
(Question from Eric Kow: should we flip merge2FL for more uniformity in
the code?)