[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)
@stevenjack good spot :eyes: - thanks!