Make DeliverAsync awaitable

One issue with doing async void is that you can't catch the errors that are thrown once you make the first await call inside DeliverAsync. I've added Task as a return value so that this will no longer happen. You can see this by running the example program where no errors are thrown. If you then change it to `transportWeb.DeliverAsync(myMessage).Wait();` you should see an aggregate exception thrown with the only inner exception being a Bad Request.

Excellent job overall.