Support for UDP trackers

Created an interface for trackers, and separated existing implementation into HttpTracker, and added UdpTracker.
Left is actually not currently updated, it's only initialized to bytes left to download on program start. We can leave your change in, but I'll have to remember to start updating Left when writes are verified by the diskio module.