Return -1 as default value for missing or malformed content-length header

If `content-length` is missing attempt to decode the stream. If we fail we will retry anyways. 

Edge case is when the `content-length` comes back as 0 on request replaying which we retry the request.

closes #523 #530  #501