This has no value unto itself, but is necessary for adding default
arguments to the ConstraintDescriptionRelatable methods, which we'll
need to instrument in source locations.
Instead of having a copy of each method for each type, factor the
constraint target logic to use a new protocol RelationTarget.
Note that since RelationTarget returns a new ConstraintItem and the
constructor for ConstraintItem is internal, a user will be unable to
erroneously extend the protocol.
LayoutSupport should really be a RelationTarget too, but it seems you
can't extenda a protocol to implement another protocol.