The interpreter now returns a map containing :val and :env

This lets me define two special forms `do` and `def`, which in tandem
let you "modify" the environment in a block of code.

    (do (def inc (f (x) (+ x 1)))
        (inc 0))
    ; => 1