Spawned from #28642
Similar to #6993
Idents are strictly necessary for PathSegment, PatIdent (hygienic identifiers) and ExprWhile, ExprLoop, ExprBreak, ExprAgain(hygienic labels). All other data structures in AST can live with Names most of the time and convert them into Idents with empty context in rare circumstances when Ident needs to be obtained from a non-hygienic name.