Add s3 client and wire it in

Ready for review.

We went with a modified version of 2 below. More specifically the request flow is now as follows.

  1. If the thumbnail exists on CEPH
       1. read it in locally in memory
       2. close the connection
       3. send it back to the client
  2. If the thumbnail does not exist
       1. download the original
       2. thumbnail the original
       3. in the background, upload the thumbnail no CEPH
       4. stream the thumbnail from the local disk back to the client

/cc @nmonterroso @ljagiello @Wikia/platform-team 

Todo:
 * [x] fix the s3 tests
 * [x] confirm that this works with the local storage interface
 * [x] add a thumbnail clean up background task. Consider using [`at-at`](https://github.com/overtone/at-at). Should we also use this for cleaning up originals?. Let's do the thumbnail clean-up with chef. [https://wikia-inc.atlassian.net/browse/PLATFORM-425](https://wikia-inc.atlassian.net/browse/PLATFORM-425)
 * [x] replace `throw` with [`throw+`](https://github.com/scgilardi/slingshot)
 * [x] add the content-type header when we `s3/put-object`
I think this string should be static "thumbnailing failed", and the code, out, and error should be passed as context:

```clojure
(log/warn "thumbnailing failed" {:code exit :out out :err err)
```