add if0 construct to F1WAE (exercise 4.3.1)

allowing simple recursive functions
lexically scoped deferred substitution interpreter
first class functions with eager substitution
remove with from language definition

now implemented as a special case of function definition and application

(Exercise 6.3.1)
add deferred substitution and closures to FAE
check validity of evaluated function position

exercise 6.4.1
simple WAE interpreter in haskell
interpreter with lazy evaluation
carry over tests from ch6 to ch8
top level strictness point (exercises 8.1.{1,3)
add if0 construct (exercise 8.1.2)

using lazy evaluation to prevent resolving expressions
cache necessary computation in lazy interprete
language with recursive and conditional constructs