Add CompileErrors for problems with cases.
Every *Result should have synth-bind and check-bind.

CheckingResult and SynthesisResult should both have check-bind and
synth-bind respectively, which behave the same as their bind() function.
Give DataType a method to look up variants.
Support cases expressions.

cases expressions are now supported in the typer checker. Errors will be
raised for:

- Inexhaustive matching without an else
- Unnecessary else when all patterns are present.
- Cases that aren't variants of the type.
- Too many or too few bindings for the variant's fields.