ivy: move (most) evaluation up out of the parsing

This prepares us for functions by evaluating variables after parsing of
an expression is complete.
ivy: finish pulling expression evaluation out of parsing

Now (internally) parser returns a list of Exprs that must be evaluated.
Add assignment as an implementation of Expr to handle x = 1.