Display more detailed errors for HTTP 400.

HTTP 400 errors were not very informative. It was unclear what was
broken and why.

The error output now contains all the field errors, making it more clear
what's wrong.

Reviewed at https://reviews.reviewboard.org/r/4340/
Add more detail for API errors.

We now log debug output for any API errors. The output shows the payload
of the error, making it easier to see what went wrong.

In the case of a failed diff upload, we also include the wrapped error
class's text in the message, instead of the raw error string we get from
the server.
Fix a typo.

s/Unexpexted/Unexpected/
Skip files where 'p4 print' provides a symlink

The riddle: how can a file both exist and not exist? The answer: symlinks! When
a symlink is checked into perforce running 'p4 print -o' will create a symlink,
not the file that it points to. This naturally makes postreview.py choke...

~% post-review
Traceback (most recent call last):
  File "/share/rbtools/rbtools/postreview.py", line 4115, in <module>
    main()
  File "/share/rbtools/rbtools/postreview.py", line 4061, in main
    diff, parent_diff = tool.diff(args)
  File "/share/rbtools/rbtools/postreview.py", line 2002, in diff
    return self._changenum_diff(changenum)
  File "/share/rbtools/rbtools/postreview.py", line 2299, in _changenum_diff
    self._write_file(old_depot_path, tmp_diff_from_filename)
  File "/share/rbtools/rbtools/postreview.py", line 2475, in _write_file
    os.chmod(tmpfile, stat.S_IREAD | stat.S_IWRITE)
OSError: [Errno 2] No such file or directory: '/tmp/tmpsCS-fw'

Resolving symlinks, especially those with a relative path would be tricky.
Also, there's no certainty that the file it points to is even in version
control. Hence I'm just dropping it from the review with a warning.

Testing done:
Tested this change both when reviewing a single symlink file and a batch of
files containing a symlink. We've been using this change against RBTools 0.3.

Reviewed at https://reviews.reviewboard.org/r/3221/