Generate better record update functions

Specifically, make sure that the type respects any updates in
parameters, and leave parameter positions implicit so that the
elaborator can infer them (which is much easier than doing the hard work
in the setter itself...)