LessEndpointAddress compares IP addresses lexicographically and returns true if first argument is lesser than second
RepackSubsets takes a slice of EndpointSubset objects, expands it to the full representation, and then repacks that into the canonical layout. This ensures that code which operates on these objects can rely on the common form for things like comparison. The result is a newly allocated slice.
SortSubsets sorts an array of EndpointSubset objects in place. For ease of use it returns the input slice.