This commit cleans up the I18MetaVisitor code by moving all the state of the visitor into a `context` object that gets passed along as the nodes are being visited. This is in keeping with how visitors are designed but also makes it easy to remove the [definite assignment assertions](https://mariusschulz.com/blog/strict-property-initialization-in-typescript#solution-4-definite-assignment-assertion) from the class properties. Also, a `I18nMessageFactory` named type is exported to make it clearer to consumers of the `createI18nMessageFactory()` function. PR Close #33318