Rewrite s-if-else synthesis to be easier to follow.
Add list-files() to filelib.

The list-files() function allows Pyret programs to get a list of files
in a given directory. It can be used like:

  import filelib as FL
  print(FL.list-files("."))
Merge remote-tracking branch 'origin/master' into type-check
Add `type-check-tests' make target.

The type-checking tests can now be run automatically. All files in
tests/type-check/good should result in ok(code), and all files in
tests/type-check/bad should result in err(errs).
Add foldr2-result and map2-result.
to-type() can now fail, stopping type-checking.

Since converting an annotation to a type might result in a type error
(for example, List<A,B,C>), it now returns a FoldResult<Option<Type>>.
Fix issue with comparing t-name's.
Add error for giving arguments to a type that takes none.

This error is for when the programmer gives arguments to a type that
isn't supposed to take any. For example, Number<A>, { a :: Number }<A>,
etc.
Make satisfies-type a function and not a method.

satisfies-type is now a function, and has been moved into
type-constraints.arr so that it can make use of generate-constraints if
necessary.
Remove locs from types in type-structs.arr
TEMP