C# generic permutation, ordered sub sets with Linq