[r=Rocky] Carl check typed/typed binary expressions

This is the rest of the puzzle. Again, the changes made to the actual code is fairly trivial and merely fixes a few bugs I had in my first attempt. The second commit contains tests.

Still left to investigate are constant types
```
type R rune
R(1) + 3
```

but I suspect this shouldn't be too painful. I also suspect that binary expressions are the most complex part of the type checker, as they where for the evaluator. Hopefully things are easier going forward.