Improve error handling

I have a few changes that should improve robustness:

* On linux, the include files are searched for based upon the location of the OpenCL shared libraries. This works fine when using AMD APP SDK, and I would expect it to work with CUDA as well.
* If clEnqueueWriteBuffer or clEnqueueReadBuffer return an error, then an exception is now raised
* The execution of certain methods was continuing after an exception is raised. These methods now return (after cleanup) upon the exception.

I'm new to developing native Ruby extensions, so you should probably take a closer look at a few of these changes. Thanks!  (The previous pull request which I closed had a bug in extconf.rb, such that if the headers were not found it would infinite loop.)