cartesian product of enums (ticket #442)

Would welcome discussion, I'm still fuzzy about the cloning part.