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
Sanity check arguments

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