socket-io: make it possible to specify an interface index as a MulticastInterface SocketOption on linux.

On windows, a value to IP_MULTICAST_IF with a most significant byte of zero is interpreted as an interface index instead of an ip address.
This makes it possible to set the interface index from .NET as follows:
socket.SetSocketOption(SocketOptionLevel.IP,
SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(ifindex));

For this to work on other platforms, we need to detect this case and handle it with an ip_mreqn struct.
socket-io: pass MulticastOption InterfaceIndex into ip_mreqn imr_ifindex