minor cleanup of error messages

- used same string for logging and error response to ensure they stay in
  sync
- pass through any http error status codes from remote URLs
interpret negative height and width values as 0
add docs and cleanup data code

- simplify ParseOptions
- add lots of docs to ParseOptions and NewRequest
- cleanup some data tests

No behavioral changes.