Combination function

The combination function takes a series of arrays as arguments and produces a list of  combinations from each array.