migrations: Fix builder 'with' methods to look at sub/super classes.

Previously builders would get a "with(String)" if the String property was unique
within that single entity. However, if super/sub classes also had single String
properties, then they would also get "with(String)" methods.

Same this for code values, like builder.isCodeValue().

This pulls the calculation of "is this type unique to the root entity and all of
it's sub entities" into the Entity class.
migrations: Avoid NPE in builder setter methods.
features: Re-codegen.
migrations: Add covariant overrides for fluent setters.

Previously, if a base entity builder added a fluent setter, the child
entity builder would get that method for free.

However, the return type was still the base class's builder type, which meant if
a caller was trying to chain together calls against the child builder type, the
return type wouldn't suddenly jump to the parent builder type.

So, to avoid this, we just brute-over generate overrides for each fluent
setter in the sub entity so that we can have it return the right type.
features: Test for covariant return types in builders.
features: Re-codegen.
migrations: Add getter overrides to help confused scalac.
features: Re-codegen.
migrations: Consider uniques within the branch, not the whole tree.

Previously, given ParentA, ChildA extends ParentA, and ChildB extends ParentA,
if ChildA and ChildB both had a string type, it would not be considered unique,
because we went up to ParentA and asked it for unique types within the whole
inheritance tree.

However, since ChildA and ChildB are in different branches (not sub or super
classes of each other), their types should not conflict.

So, now the unique calc only looks at the current class's base classes, current
class, and all subclasses.
features: Re-codegen.