A library author wants subclasses to keep their own type through a `with`-style update, but also wants the param to accept the most-derived type. Which design type-checks AND keeps polymorphism intact for subclasses?
// Goal: u.merge(other) returns the subclass type, and `other` must be the subclass type too.