Clean up requires.

Move all the requires into the top level of the lib directory and
require everything in order when you `require 'http_redirect_test'` the
individual components of this gem are not designed to be used separately.
use [] notation for fetching headers.

We're speculatively checking whether a header exists or not, so nil is
an acceptable response.

using [] in this case makes more sense than a nil guard and a fetch!

Also clean up the unit tests around this to actually set the header
values in our test object rather than stubbing the hash interface.

This couples us to some internal implementation of Net/HTTP (the
`initialize_http_header` method in `Net::HTTPHeader`) but this is in my
opinion slightly better than stubbing it's hash like interface.

We're coupled to it's implementation either way - but this way is
slightly more intention revealing.