Add support to bind to 0.0.0.0 on multi-home server.

On multi-home machines, when server is bound to address 0.0.0.0,
it accepts incoming requests on all interfaces(addresses), but
tends to respond to those requests from different interfaces,
on which the requests were NOT received at all. This causes
client connections to time out after some time. [1]

This happens because of something called - Weak Host Model -
followed by Linux from ages. [2]

This patch updates socket_send4 & socket_recv4 routines to use
sendmsg(2) & recvmsg(2) functions respectively. For these
functions provide the original destination address on which the
request was received, which can then be used while responding to
those requests. [3]

Thanks to Mark Johnson for pointing me to this solution. Also
many thanks to Simone Caronni for filing the bug and helping me
with the testing.

---
[1] https://bugzilla.redhat.com/show_bug.cgi?id=917580
[2] http://technet.microsoft.com/en-us/magazine/2007.09.cableguy.aspx
[3] http://bert-hubert.blogspot.in/2012/10/on-binding-datagram-udp-sockets-to-any.html