Shale/idempotency ids in headers

R? @cosn 

cc @kyleconroy 
should we even let the caller specify a key? Ideally people shouldn't have to generate one themselves, and if they really want to (for example, their retry is async and they've persisted the key, they can still set it on the params by hand)