Be stricter about using IObjects and IArrays in the interpreter

IValue.from_js checks that normal JS objects don't occur in the
interpreter, unless the value is coming from an external source.
Binding the evaluation result JSON into the env is wrong

Move the binding back to Environment.prototype.run, which has access
to the unJSONed interpreter values.
Turns interp_util.runFully into an EventEmitter

Rather than having repeated callbacks with a 'type' parameter,
it is cleaner and more extensible to use node's event infrastructure.
Don't mutate the memoised cons tail

interp_util.resolveSequences assigned val.tail then unshifted the head
onto it, meaning that further invocations duplicated the
head. Assuming the intention was to memoise the result, I've made it
memoise the whole array.