fix info_hash bug; make request a full abstraction

- get_info_hash had a bug where I never terminated causing a terrible program loop
- I turned request.h into a full request object so each request can be created in the connection call back, and passed to on_request, announce, scrape, etc.