CHEF-4086: Use s3_external_url configuration for generating artifact URLs for clients

There are use-cases where we want to communicate with bookshelf and yet
return a different URL. For example, we might have multiple erchef
servers and a single bookshelf server sitting behind a load balancer. The
artifact URLs sent back to the client needs to come in from the load
balancer. However, we would want the erchef servers to bypass the load
balancers and talk with bookshelf on the internal network.

This patch generates URLs using with s3_external_url instead of s3_url.
It is expected to work with the omnibus configurations so that by
default, s3_external_url is set to the same value as s3_url.

If the s3_external_url is set to the atom 'host_header', then the
external url parameter will be used. Otherwise, s3_external_url is
used to generate the presigned url

Other Changes:

 - generate_presigned_url and generate_presigned_urls now require an
   additional parameter for the request Host: value.
 - get_config() is now separated as get_internal_config() and
   get_external_config()

generate_presigned_url() and related functions have been extended so that
one can pass a fallback vhost url.

get_config() has been separated into an internal and external flavor. The
internal flavor is essentially the old get_config() behavior. Erchef uses
these credentials to talk with Bookshelf or to S3. The external flavor is
used to generate presigned URLs so that clients can talk directly to
Bookshelf or to S3. This allows for situations where erchef or bookshelf
is proxied or load-balanced.
Added testing for host_header and s3_external_url
Refactor eunit tests for verifying s3 url config is respected