Support for UDP trackers

Created an interface for trackers, and separated existing implementation into HttpTracker, and added UdpTracker.

Made recommended changes in #2  to UDP tracker:

- Removed unnecessary port range
- Added error checks to all binary.Read/Writes
- Re-factored some of the BinaryUnmarshal methods to follow approach in peer.go