Support for UDP trackers

Created an interface for trackers, and separated existing implementation into HttpTracker, and added UdpTracker.
Is there any reason we need to bind to a specific source port range? I don't see anything in the UDP extension spec about this; I think just binding to any available UDP port would be fine. You could probably remove this loop and the startPort and endPort constants.