Some TypeCheckers match_annotation implementation doesn't traverse unions, while others do.
Comment from @ntBre:
... I feel like we should probably either always traverse unions or never traverse unions and apply that decision to all of our TypeCheckers rather than keep a mix of them.