[ty] Allow empty names in functional `Enum(...)` semantics (#24570)
## Summary
We now accept empty names, like `Enum("E", ""), Enum("E", []), Enum("E",
{})`. These are valid at runtime; we return `tuple[()]` for its members.
I've also added some more tests to make a few behaviors explicit
(without changing them): we reject literals with star unpacking (for
simplicity), but accept non-literal arguments, and non-literal keys and
values within literal arguments.