Added a bunch of error codes. Improved error output.

Instead of dumping a numeric error code, it gets translated
to a string containing the CL_WHATEVER that describes the error.
That symbol is what appears in API descriptions.

A function, opencl_strerror(code) handles the conversion and is
available.
made public opencl_strerror, Device.platform returns a platform object.
started with unit tests for OpenCL driver
args can be passed directly as an iterable when creating a kernel

This makes creation of a call to a kernel in a program very compact.
set_args for kernel. Properties for MemObject
added buffer copy method

This allows device memory copying.
simple unit tests for OpenCL memory objects