socket-util: introduce in_addr_union similar to sockaddr_union and make use of it everywhere
networkd: add a number of calls to manipulate in_addr_union structs
networkd: add address pool support

When an address is configured to be all zeroes, networkd will now
automatically find a locally unused network of the right size from a
list of pre-configured pools. Currently those pools are 10.0.0.0/8,
172.16.0.0/12, 192.168.0.0/16 and fc00::/7, i.e. the network ranges for
private networks. They are compiled in, but should be configurable
eventually.

This allows applying the same configuration to a large number of
interfaces with each time a different IP range block, and management of
these IP ranges is fully automatic.

When allocating an address range from the pool it is made sure the range
is not used otherwise.
networkd: configure dhcp server range only after successfully setting an IP address on the interface

This way we can make use of the addresses of the IP pool.
network: automatically assign each container veth link a /28 IP address range