Do not pre-emptively encode unicode strings

Pushes the user text encoding step back to processed that actually need
them (e.g. hashlib.md5(), urllib.quote_plus()), avoiding the conversion
back and forth between different encodings.
Introduce util.TO_ENCODED lambda

This can be used instead of writing out the isinstance() check against
unicode strings.
Consolidated gitignore list

Removes the .gitignore files from the cache/ and forms/ subdirectories
and instead drops those directly into the main .gitignore in the root.
Temporary directory support

Ensures the add-on has access to a temporary directory for writing files
that only need to exist for a short time (e.g. to feed a service).
Workaround for eSpeak on Windows

Because the CLI cannot handle non-ASCII characters correctly (at least
on Windows and on Python 2.7), we can instead write out a file and have
eSpeak read that instead.
Merge branch 'chg/paths-encoding.windows-espeak'

Enables support for eSpeak phrases requiring unicode on Windows.
Eliminate encoded paths

These are no longer necessary without unicode filenames (and indeed this
module does not even work correctly with a unicode-requiring base path).
Fix for Anki's addMedia()

This method expects a unicode string, which we can convert up to.
Replace media_filename

Now available instead if temp_path and cache_path, which makes certain
that files are not generated depending on the current working directory
behavior.
Handle file system encoding on addFile/addMedia

If by chance we are sending Anki a file from a file system with
non-ASCII characters, passing the file system encoding in through the
unicode() constructor will handle the conversion.
Merge branch 'chg/paths-encoding' into develop

Brings in various fixes for encoding and path handling, also providing
fixes for eSpeak on Windows and how paths are generated. In general,
things are left in their native encoding as possible (i.e. unicode
strings for user input from the Qt application, native encoded strings
for the file system paths) and are only converted when necessary for
some other system (e.g. user input must be encoded for hashlib.md5() and
urllib.quote_plus() whereas paths must be converted to unicode for calls
into the Anki core).