Pass by-value to eval

We have to clone everything anyway as we build values so we might as well
make it an upfront cost to calling eval. The client will be responsible for
cloning locally if they need to retain a copy. Relying more on move semantics
makes the implementation less noisy.