Replaced OpenCL-specific ocl::finish() by more generic backend::finish()
Replaced use of ocl::finish() by backend::finish() to be more general.
Replaced use of ocl::finish() by backend::finish()
Replaced ocl::finish() by backend::finish()
Substantial refactoring of OpenCL backend to allow for multithreading.

Instead of using the global routines viennacl::ocl::current_XYZ(),
now the context is obtained from the kernel or the memory buffer.
ocl::handle<> thus holds a reference to its ocl::context,
a ocl::kernel holds a reference to the ocl::program and ocl::context,
and a program holds a reference to context.
init() routines for the kernel sources now take the context as parameter.