Unite the primitives

Primitive implementations are now shared between the executor and the evaluator.

This required the following:

1. Make primitive definitions into functions on Const rather than Value. They all did this anyway.

2. Move a bit of code around to prevent circular imports

3. Have both the evaluator and the executor wrap the appropriate constructors (for Value or ExecVal) around the pattern analysis / result values of primitives