Refactor tests

* Use pytest syntax to reduce boilerplate
* Move testcase tests into testcases directory

Depends on #26, so will be easier to review when that is merged.
It's basically the same length of line, and we can't use `assert` for everything (`assertCountEqual` for instance), so using `assert` in places can make code look inconsistent even within the same project.  The `self.assertBlah` methods are also a bit easier to read due to their parentheses, and allow for easy custom error output.