Refactor optional relationships to a subclass

Also appease mutant by adding some explicit checks that `#optional?` returns a
boolean.

Katuv is now 100% mutation covered.
implement Definition#nodes
wip