Improve code reuse between trans/_match.rs and check_match.rs

I believe there's more commonality to be found there but maybe small steps are better. I'm also in the process of documenting what I can, I will see if I can add it to this PR.

It also seems to me that ideally some of this stuff (especially the pattern sanity check) could live as a separate compiler-agnostic module but I understand this may not be the right time (if not the worst) to start the process of modularising rustc.
I am feeling dumb; why do I not see an analogous bit of code somewhere in your changes that reorders the fields to struct-definition-order in the same manner that it used to do here?  Do we simply not need to recover that order, and so you left it out?