strings/bytes/unicode cleanup

generate() methods can now return either plain strings (for Python 2 and 3) or unicode strings (for Python 2). append() etc also accept the same types. __iter__() will now always return an iterator over UTF-8 encoded byte strings.
use ChildGenerator in HTMLChildGenerator