Parent relationships cannot be optional in Infrahub. Since an IP address
can exist without being assigned to an interface (reserved, planned),
we use kind: Attribute instead of kind: Parent.
Also change InfraInterface.ip_addresses from Component to Generic
since Component requires a matching Parent on the other side.
Both sides now use explicit identifier: interface__ip_addresses
for proper bidirectional linking.
InterfaceEthernet.connected_interface is a self-reference that requires
direction: outbound to avoid bidirectional conflicts per Infrahub docs.
Ref: #41