setup: avoid overriding built-in open(), use io.open() instead of codecs.open()