During the review, krzys pointed out that the backwards-compatibility schema changes I made on
DM-32138 could become a bit of a tangle if we have future removals of other fields. Given that we want to include this in the next release, we elected to merge the code as-is (it has a test that demonstrates that it can read all of the extant VisitInfo versions in the same process), as we couldn't come up with a viable solution in such short order. It's worth spending a small effort trying to clean it up in a way that will be easier to modify in the future, hence this ticket.
I had tried making a subclass of VisitInfoSchema (VisitInfoSchemaWithExposureId) and having the factory return whichever instance was appropriate for the version in the metadata, but that ran into compiler problems due, I think, to the static parent/child classes.