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 or command_queue. From the user standpoint though
the indexing is always happening by `const backend::command_queue&`.

All caches may be transparently purged by purge_caches() family
of functions (The name has changed from purge_kernel_caches()).