[Review] Extract S3 broking strategy

#### Problem

Due to the need to have two methods for getting data for a given component (**S3** and **HTTP endpoint**), we need to first extract out the current **S3** logic into a *Loading Strategy*.

#### Solution

1. Extract **S3** logic into loading strategy.
2. Create `ComponentFactory`.
3. `ComponentFactory` uses specified loading strategy to create component with correct `content`, `headers` etc.

**Note**: This PR includes a refactor of `rack_spec.rb`.

![touchdown.gif](http://media1.giphy.com/media/5xtDarL7EujK1BOlXB6/giphy.gif)
I ran this in the `election-data-component-cache` and the `version` being passed in is incorrect.

It should be using `sequence` not the cache busting version. This is because we need to pass in the id, options and sequence id to find the path of the component in s3. Apart from that it runs fine! :cake: