Wrapped instruction results in nested class (WorkItem::Values).
Instructions results stored in vector with static map of key->index.
Implemented region-based pool allocator for WorkItem allocations.
Resizing of instruction values more aggressive.
Now using unordered_map for instruction result indices.
Added check for C++11 availability and fallbacks if not supported.
Replace map of memory buffers with simple vector.
Now using unordered_map for builtins.
Added cache for builtins to avoid parsing function names.
Added unique identifier to Program objects.
Shared interpreter caches persist across kernel invocations.

Per-program interpreter state is retained until program is destroyed,
and re-used for each kernel invocation belonging to that program.