Fixed UDP TX schedulers to allow both IPv4 and IPv6 message sending.

The UDP TX schedulers were implicitly bound to the socket which was used to
create the first instance of that scheduler.  This led to several bugs:

- The scheduler could only send IPv4 traffic and would fail when given IPv6
  traffic to send.
- When the IPv4/IPv6 configuration was changed and sockets were destroyed and
  possibly recreated, the scheduler was left referencing stale structures.

The new design lets the UDP scheduler fetch the proper sockets, and needs to be
told when the sockets change.  Also we now explicitly add two I/O sources to
handle IPv4 and IPv6 traffic properly.