dhcp-network: allow UDP socket to listen on any address

For this to work nicely we need to use REUSEADDR so that more than one socket
can be open at the same time. Also, we request the ifindex to be appended
to incoming messages, so we know whence it came.
sd-dhcp-server: add basic functionality for creating/destroying server instance
sd-dhcp-server: add basic functionality for starting/stopping server

Bind to UDP socket and listen for messages, discarding anything we receive.
sd-dhcp-server: bind to a given interface

We will (at least at first), restrict our focus to running the server
on at most one interface.
sd-dhcp-server: add basic message handling and verification
sd-dhcp-server: add basic message parsing

Parse the maximum message size the client can accept and the client id, falling back to
sane defaults if they are not set.
sd-dhcp-server: bind to raw socket for sending

We would like to use the UDP socket, but we cannot as we need to specify
the MAC address manually.
sd-dhcp-server: add support for setting the server address
sd-dhcp-server: add support for sending messages
sd-dhcp-server: add basic DISCOVER/OFFER support
sd-dhcp-server: add basic REQUEST/ACK support
sd-dhcp-server: add basic NAK support
sd-dhcp-server: add support for clients requesting lease lifetime
sd-dhcp-server: track bound leases

Make sure we don't hand out the same IP twice. We still don't
handle lease expiry.
sd-dhcp-server: add dummy DECLINE support
sd-dhcp-server: add RELEASE support
networkd: add dhcp server support

When enabled in [Network] it will set up a dhcp server on the interface, listening
on one of its statically configured IPv4 addresses and with a fixed size pool of
leases determined from it.

Example:

[Match]
Name=ve-arch-tree

[Network]
Address=192.168.12.5/24
DHCPServer=yes

[Route]
Gateway=192.168.12.5
Destination=192.168.12.0/24

In this case we will configure ve-arch-tree with the address 192.168.12.5 and
hand out addresses in the range 192.168.12.6 - 192.168.12.38.

In the future, we should (as suggested by Lennart) introduce a syntax to pick the
server address automatically.
networkd: link - left-align debug messages

Still add some whitespace betwen ifname and the message to get the
messages aligned (as I find it easier to spot specific messages this way).
sd-dhcp-client: fix invalid free() in client_send_request()

static int client_send_request(...) in
./src/libsystemd-network/sd-dhcp-client.c tries to initialize
"request" by calling client_message_init(...), which has atleast
5 error cases where it can return without that happening.
This leads to the function finishing without "request" being initialized.
core: fix invalid free() in killall()

static int killall(....) in ./src/core/killall.c tries to get "s"
initialized by calling get_process_comm(...) which calls
read_one_line_file(...) which if it fails will mean it is left
uninitialized.
It is then used in argument to strna(s) call where it is
dereferenced(!), in addition to nothing else initializing it before
the scope it is in finishes.