Use tox to handle the testing and enable coverage

* Bring the testing up to snuff using tox and require 100% coverage.
* Fix flake8 failures that existed in the code base.
* Adjust travis to run tests using tox.
* Travis's PyPy has supported CFFI for a long time now.
* Use six to handle compat instead of copy/pasting things ourselves.