Rework parsing of Piq sub-variants

It is now strictly DFS as one would expect and has a cleaner implementation.

DFS means that variant and enum options, including those of nameless
("non-terminal") sub-variants, are tried in the order they are mentioned in
their variant/enum definitions.