Check instead of infer

  We can take advantage of information from signatures if we check instead of
infer.  I'm not sure if this is actually paying off, but it should mean that we
unify less when signatures are present, and generate goals that are a little
more specific.
Fix a bug with comprehension checking

  Wasn't relating the size of the goal type to the size of the arms of the
comprehension.
Avoid redundant cases
Remove unused inferFun function
Update tests for changes to inference

  The changes didn't alter the behavior of the typechecker, only the
warning/error output, and the order of some variables when generalizing.
Fix #16

  Propagating type signatures down when they're given seems to fix this bug.
Switch from always inferring to checking when possible