Python 3 support

This pull request brings support for Python 3 to Simon. This is largely made possible through the `_compat` module.

One of the goals, especially going forward, is to write for Python 3 first and introduce special cases for Python 2.