Allow callers to specify the AmazonSNSClient instance

* For callers that do not want to use the static AmazonSNSClientFactory, allow PublisherService to take an explicit AmazonSNSClient as parameter.
* Makes unit testing easier, since you can pass a mocked instance.
* Makes managed lifetime handling of the sns client easier, since you can get a handle on the instance to call shutdown() later.