cleanups and refactorings:

- Infer: in public typeInference, apply the final subst before returning the result
-        minifyVars: Generalize so we can do it globally for an AST as well
- Pretty: fix pretty for multi-arg or zero-arg functions and calls
- Types: Split "Types" class into Substable and move freeTypeVars to "VarNames" class
         also - use functor/foldable where appropriate to ease implementation
- Utils: use minifyVars before returning result in checkFiles
- add some tests (debounce tests still fail)