Improved error handling and use of Faraday Middleware

Delegates responsibilities to Faraday Middleware for:

* Following redirects
* Parsing JSON responses
* Mashifying responses
* Performing HTTP Basic Auth

This reduces the size of the codebase meaning less code to test and maintain :)

It also enhances the error handling features of Rapidash to provide richer exception handling. See https://github.com/paulspringett/rapidash/blob/error-handling/lib/rapidash/response_error.rb for the full documentation.

There's still a few bits to tidy up, including

- [ ] ResponseError specs
- [ ] OAuth client working with Faraday Middleware
- [x] Test client working
- [x] Fix existing specs

Wanted to get this up here early and see what your thoughts are. Are you happy with the approach / ideas here?