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.
There are lots more custom assertions though, including ones we wrote ourselves.  And I don't want to have to reimplement `assertCountEqual`, probably more slowly than the standard library version, in order to save a few characters on a line I'll be copying and pasting anyway.

On the subject of readability, although it's nice to have the `==` (mind, you can do that with `self.assertTrue` if you really want to), this is where I get to invoke the great daemon, Haskell.  Bwahahaharrr.  Haskell has something called "currying" where you can omit the parentheses in a function call, and it's the most common way of writing Haskell.  It's clean-looking, but headache-inducing.

Which of these is easier to read?

`add x y`
`add(x, y)`

What about this?

`map (sub 2) xs`
`map((lambda x : x-2), xs)`

The concise ones are easier on the eye, but require more understanding and more re-reading, especially if you're just flicking through (and with tests you're _always_ just flicking through).