Error handling

provides an interface: `YellerErrorHandler` for error handling.

There are two types of errors, and they are logged in different places:
1. Authentication errors, in which the http api responds with a 401
   these are logged straight away, and skip the usual retrying, because
   they'll fail straight away
2. IO related errors/non 200 http codes (all treated the same)
   these are logged once retrying has failed completely

by default the error handler prints to STDERR, and there's a helper function for creating error handlers out of `log.Logger`