Refactor follow redirects

- Properly handles relative URIs upon redirects
- Prevents from endless redirect loops
- Allow limit amount of redirect hops (if :follow given as Fixnum)
Provide requested uri into response object

Use case:

  response = HTTP.with(:follow => true).get("http://ixti.ru/")
  response.uri # => "http://ixti.net/"
Modify Host header upon redirects
Fix list of redirect codes we handle
Reset underlying HTTP parser
Improve endless loop redirect detection