Various fixes for DHCP.

- include sys/ioctl.h, so we know if the system supports SIOCSARP
- add listen_socket_t to dhcp_socket_t, so that we can use all of
  it's fields
- for systems supporting SIOCSARP, check if "interface" is defined,
  and if not, refuse to do ARP, as it requires an interface

Manual merge of 649cc4f12
Sanity check arguments

If there's no interface, don't update anything.  It will generate
an error.  Instead, return an error saying "no interface"

Manual merge of 56fbc3ae8