Fix bug: InterfaceGroupByVector order dependency (#4142)
The InterfaceGroupByVector selector was sensitive to the order
in which residues were presented it, failing to detect interactions
between residue i in group 1 and residue j in group 2 if j < i.
Why? The UpperEdgeGraph stores only the edges to higher-
indexed nodes and is used for neighbor detection because it
is fast to add edges to this kind of graph. It's not the right
choice, however, if you're trying to iterate across all neighbors
of a particular set of residues.
Because the InterfaceGroupByVector class used this graph,
it would miss residues at the interface between two sets
if the lower-indexed residues were listed second; e.g.
if you have a pose w/ chains A and B (and A comes first)
and you created an IGBV where you said the two groups
were chain B and chain A (in that order), then the IGBV
would find no residues at the interface.