Given a function f :: a -> (C,[C]) which returns a non-empty list of
characteristics C of a, partition a list of as into groups
such that each element in a group shares at least one characteristic
with at least one other element of the group.
Partition a list of as paired with a non-empty list of
characteristics C into groups
such that each element in a group shares at least one characteristic
with at least one other element of the group.