build: make autogen.sh a little bit more generic
interfaces: switch to Netlink to gather interface-related information

Instead of using getifaddrs() which gives incomplete information, we
use Netlink which is supported since a long time. Many information are
supported by Netlink: bonding, bridging, VLAN... Unfortunately, the
degree of support depends on the version of the kernel:

 - IFLA_VLAN_* stuff is available since 2.6.23 only.
 - IFLA_MASTER seems to be supported since ages (at least
   2.4.32). However, it does not allow to differentiate a bridge and a
   bonding. It does not apply to a VLAN.
 - IFLA_LINK is not sent for a VLAN before 2.6.23.
 - IFLA_BRPORT_* has just landed in Linux.
 - IFLA_LINKINFO and IFLA_INFO_KIND which could help detect the kind
   of device are only available since 2.6.23.

So, in summary, we can't reliably use Netlink to gather VLAN, bridging
and bonding information if we want to support 2.6.18 kernels. When
2.6.23 will be the minimal version, we could do some interesting
things. Also, it seems that ethtool stuff is not available through
Netlink.

This commit also happens to prepare the support of additional OS. Only
interfaces-linux.c (and netlink.c) are now Linux specific. Adding
support for KFreeBSD should be easy enough. More code factorisation
will happen then.
interfaces: handle correctly VLAN inside VLAN inside bridges inside bonds

Recursively look for the physical interface.
lldpd: fix debug message when discarding a received frame

There are legit reasons to discard a received frame. This happens on
bond interfaces. Fix the message to just say we have discarded a
frame, not we are not able to receive something.
interfaces: harmonize arguments of detection functions

Some detection functions were requiring a name, other an index. We
always use a `struct netlink_interface`. The only drawback is that
those functions can only be called in the context where this structure
exists, i.e when discovering interfaces. In the case of bonding, we
used one function to detect if the interface was active. We replace
this by an unconditional replacement of the source MAC address by 0.
build: ship a include/ directory

Some (old) distributions are shipping outdated kernel headers. Some
oddities were detected in `configure` and corrected in `compat.h` but
this is cumbersome. Like `iproute`, we now ship a "complete" include/
directory containing the missing bits. It comes from a 3.6.9
kernel. Using too recent headers with too old kernel should not be a
problem. Those headers are just definition and there was not guarantee
that the kernel used to compile was the one which will be used to run.
build: ensure _GNU_SOURCE is defined early

It is needed to use some extensions like `strnlen()`.
interfaces: disable the use of ioctl for bridges

ioctl for bridges are not needed since 2.6.14. Moreover, they don't
play well with some drivers and they have an undefined behaviour in
32/64 bits mixed environment. Instead, we use sysfs.

Moreover, we define a new configure option `--enable-oldies` which
allows the use of those ioctl. Currently, anything not needed with a
2.6.18 kernel will be declared as oldies and disabled by default.