Now using a pseudo-asynchronous command queue.

Enqueued commands are now stored in a queue structure, which is
serviced during clFinish() (which is also called by clFlush(),
clWaitForEvents(), and clReleaseCommandQueue()). This would also allow
implementation of a real asynchronous command queue if thread-safety
was ensured.