Add support for functions with multiple types.

Some functions (like _plus, _minus, etc.) have multiple possible types
that we need to check. Since we don't have intersection types (and
probably won't ever have them), they need to be special cased in. We
only check them at locations where they are applied. Passing them to a
higher-order function or renaming them will cause them to just take on
their Number form.
Add foldl-result to type-check-structs.arr.
Handle newtype and add tests.
Handle letrec in synthesis mode.