Python3 changes to ez_setup.py

Probably incomplete; only code paths for "pip3 install --user
--editable" fixed.
Various Python3 fixes ID'd with: from cjklib import characterlookup
Merge remote-tracking branch 'origin' into python3
Correct syntax error in previous commit
Merge remote-tracking branch 'origin' into python3
2to3 some files, manual port others

build/__init__.py
build/builder.py
dictionary/__init__.py
dictionary/entry.py
dictionary/format.py
dictionary/install.py
dictionary/search.py
- Port using 2to3; some instances of list() added that could be removed
  later for improved efficiency.

dbconnector.py
reading/converter.py
- Manual Python3 porting without 2to3.
Porting for "installcjkdict --local CEDICT"

build/builder.py
- In EDICTFormatBuilder.getFileHandle(), use a try/except block to open
  a file as gzip. Files downloaded to a temporary location (/tmp/foo)
  lose their .gz extension, so this method would use codecs.open() to
  return an file handle that was unusable.
- 'import io' only once, instead of repeatedly.
cjklib/build/builder.py: import only StringIO from io
Porting necessary to execute cjknife

cjklib/cjknife.py
- Using 2to3.

cjklib/dbconnector.py
cjklib/reading/__init__.py
- Manual porting in the codepaths used by cjknife.
Update README
2to3 some more files; remove cjklib.util.UnicodeCSVFileIterator

cjklib/build/builder.py
cjklib/build/cli.py
- 2to3.

cjklib/util.py
- Functionality of UnicodeCSVFileIterator is provided by csv.reader.

cjklib/data/charactershanghaineseipa.csv
- Replace \t with , as a separator in this file to align with all
  others in this directory.
Replace a custom warn() method with built-in logging module.
Skip an unnecessary decode
Correct CSV dialect
Make DatabaseConnector._decode() a null function

In addition to being unnecessary in Python3, it was detecting the
__iter__ property of strings, and so converting str to tuple(str).
This caused an error in GlyphBuilder.

TODO: remove references to this method.
Bump SQLAlchemy version
Speed improvements for EntryGeneratorBuilder and Unihan database

cjklib/build/builder.py
- Use SQLAlchemy batch inserts in EntryGeneratorBuilder.generate()
- UnihanGenerator: don't read entire files into memory; wrap
  zipfile.ZipExtFile in io.TextIOWrapper.
- UnihanBuilder: don't read every line of the database files to find
  key names; instead read these from the file headers. Same set of keys
  is obtained (may not be backwards-compatible).