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.
I disagree that `self.assertBlah` is more readable. There's certainly more line noise.

Custom error output is possible with `assert`, though often unnecessary:
```python
assert a == b, 'a is not equal to b'
```

`assertCountEqual` is one method that I think `unittest` does well. It probabably wouldn't be too difficult to write an equivalent though.