do the unicode handling dance to get things working in python 2 and 3

This changes some fundamentals:

* Returned exception text is encoded
* Those exceptions with have no bodies now return an empty list
  rather than a list of containing one empty string. This is okay
  bu pep333 and means we don't have to think about if '' is unicode,
  bytestring, bytes, str, etc. It's just not there at all.
* mock_response in the test joins up the body response and decodes
  it to unicode before it is tested against