RFC: udp recvfrom

Fixes #8901 (also ref #5772). @Keno 

I'm open to suggestions on better ways to handle the IP4/6 duality. (another approach would be to store the binding address type in `UDPSocket` and branch based on that)

Not really sure what the overhead is for adding these function calls inside the callback. The issue is that the the `addr::Ptr{Void}` argument is only valid for the life of the callback, which necessitates deciding what it is pointing to and copying that out.

cc @jech