Raise nice errors

Applications using this gem should be able to recover from errors nicely.
Before this change, there was no (clean) way of knowing why the URL could
not be fetched.

Now you can rescue from `UrlFetcher::TooManyRedirects` or
`UrlFetcher::CircularRedirect` giving you more control on how to respond to
each scenario.

If you want to recover from either of those (and all the other custom
exceptions we might add), you can simply rescue from `UrlFetcher::Error`.