Provides 3 caches on the statement-level:
(A) On the level of indexed event properties: Properties that are wrapped in EventBean instances, such as for Enumeration Methods, get wrapped only once for the same event. The cache is keyed by property-name and EventBean reference and maintains a Collection. (B) On the level of enumeration method: If a enumeration method expression is invoked within another enumeration method expression (not counting expression declarations), for example "source.where(a => source.minBy(b => b.x))" the "source.minBy(b => b.x)" is not dependent on any other lambda so the result gets cached. The cache is keyed by the enumeration-method-node as an IdentityHashMap and verified by a context stack (Long[]) that is built in nested evaluation calls.
(C) On the level of expression declaration: a) for non-enum evaluation and for enum-evaluation a separate cache b) The cache is keyed by the prototype-node as an IdentityHashMap and verified by a events-per-stream (EventBean[]) that is maintained or rewritten.