Generalization of online kernel cache.

This is an extension of idea proposed by @bmerry in #117.
Basically, kernel_cache now is an instantiation of object_cache class
template. The object_cache may hold objects of any kind, indexed by
either `context_id` or `command_queue_id`. From the user standpoint though
the indexing is always happening by `const backend::command_queue&`.

All caches may be transparently purged by `purge_kernel_caches()` family
of functions.