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.
WorkItem memory pool now handles oversized allocations.
Using ordered map for builtin function cache.
Removed assertion in WorkItem::get().
Now using map::count() to check for key presence.
Vector of instruction values allocated in bulk as early as possible.
Merge branch 'performance'