Don't show text diff unless there were changes
Break out type into a single location :umbrella:
Use shared types

Upgrade field support to use .with()|.without()|.xor() instead of
conditionals
Clean up diff output