Add compat.py and fix Python 3 error
Add abstract base factory
Update changelog