Refactor combinations

Builds up from an empty list, instead of down from a full one. This
removes a lot of duplicates from the list, and builds magnitudes faster