To implement an interpreter cache for expressions we need to capture the function volatility. I propose to add the following two categories:
VOLATILE - Function return can change at any time
IMMUTABLE - Function returns the same result for the same arguments
The cache should be stored in the interpreter or interpreter context and thus does NOT depend on #18 as it should be unbounded. It should be possible to disable the interpreter cache though.