This refactors and improves the exception classes. Additional documentation as well as testing has been added. This also adds a new static method to opencl_error which converts OpenCL error codes to human-readable strings.