Implement RetryPolicy

A RetryPolicy encapsulates a strategy for implementing client retries.
The desire is to apply the same default behavior as the AWS SDKs. This
functionality is being added first for use by DynamoDB, but with the
hope that it becomes standard across services.

cf: https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/retry/PredefinedRetryPolicies.java

The randomness aspect still needs to be applied to the delay time
calculation for the default policy.
Shadow 'err' to follow idiomatic error naming
Implement randomness between retries for throttling errors

This is only for the default policy, and it  matches the AWS SDK
behavior.
Bug fix: retry delay was going from 0 to 2*scale factor

This behavior came from the AWS Java SDK, which I believe has the same
issue: https://github.com/aws/aws-sdk-java/issues/323
Move all retry logic into queryServer

queryServer will respect the RetryPolicy for the Server, defaulting
to the aws.DynamoDBRetryPolicy (which matches the Java AWS SDK).
Add test for retry path and fix bugs it identified
go fmt
Remove unnecessary panic

The compiler is smart enough to know the code is unreachable (found by
running 'go vet').
Add retry test for nil fields
Add additional retry test cases
go fmt
Add target to RetryPolicy function signatures

This is useful to those adding logging in their RetryPolicy
implementation.
Improve error messaging formatting

It turns out that AWS can return a field called 'message' or 'Message'
depending on the API, error type, and whether or not DynamoDB Local is
being used :(
Merge pull request #292 from cbroglie/retries

Implement retries for all DynamoDB methods