This makes the code more consistent between Python versions, and simplifies the unit tests (in particular the ones not yet written).
This is more consistent with the behaviour of Python's library functions. The function ``open()`` (say) accepts both raw strings (``bytes``) and Unicode string (``unicode``/``str``) and uses the system's filesystem encoding to convert between the two representation. PyExifTool now behaves the same way.
So far, ``ExifTool.execute()`` expected all parameters to be Unicode strings, and encoded them in UTF-8 before piping them to exiftool. This was wrong for two reasons: First, in Python 2.x filenames are raw strings by convention, so no encoding is needed. And second, the filenames should be encoded using the system's filesystem encoding, which is not always UTF-8 (unfortunately). For a more consistent interface, a new method ``execute_json()`` has been introduced that deals with the encodings.