Generating Variations and Permutations

Update: Adding Generic methods for generating all variations and
permutations of the members of an array