Sketch: a different take on defaulting values

As compared to #2541 

One thing I don't like about this is the round-trip tests are all broken,
with no obvious fix.  We could hybrid the approaches and make conversion
call an ApplyDefaults method, and then make tests do that too, but it's
still manual for the tests.  Or we could make Convert() take a flag for "and apply defaults" and not do defaults in fuzzing tests.  Or we can limit what sorts of things are allowed to be defaults (so that there are never default values in fuzzing).  Or we could add struct tags that say "has a default" and treat those specially during fuzzing.
Why would a defaulting function need both in and out? I think it should take only one value, of the destination type. Then you also only write them in pkg/api, not every versioned package.