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