This is the first non-trivial expression Value implementation. Lots of code here, so hopefully while implementing other expressions some opportunities emerge to factor out some of these details.