code: function upload (res, file, showProgress = noOp, fn = uploadRequest) {
    return new Promise((resolve, reject) => {
      fn(res, file, showProgress)
        .then(responseStatus)
        .then(parseJSON)
        .then((res) => {
          resolve(res)
        })
        .catch((err) => {
          reject(err)
        })
    })
  }
docs: upload
  Take a response object (from presignRequest) a file and a token
  and return a Promise that makes an uploadRequest()
  @param  {Object} res - the response from presignRequest()
  @param  {File Object} file
  @param  {Function} showProgress - progress event handler
  @param  {Function} fn - defaults to uploadRequest()
  @return {Promise}