Keep running tests on failure

Run all the tests, even if one fails, then report the total number of
tests that failed.

Along with this, I cleaned up the output a little so that errors are
properly displayed, aiding debugging.
Basic let statements
Add let* support

Neither "let*" nor "let" prevent you from creating a function that
refers to a variable that is defined later. This is because variables
are only checked at runtime, so by the time the function executes, the
variable that is referenced already exists in scope at that time.

If I get around to implementing "letrec", checking the variables
statically will be a prerequisite.