Make all calls asynchronous and non-blocking

Previously, there was a mix of blocking calls to the AWS APIs and asynchronous HTTP requests that were awaited.  This changes everything to be asynchronous and non-blocking.

I've adopted a convention of using for comprehensions for dealing with Futures and map/flatMap for dealing with collections. This worked for me in helping me keep which I was dealing with straight in my mind, but I'd love feedback as to how others find this.