Return event from command_queue::enqueue_nd_range_kernel()

This changes the enqueue_nd_range_kernel() method to return an
event object. This allows clients to monitor the progress of a
kernel executing on a device.
Return event from command_queue::enqueue_task()

This changes the command_queue::enqueue_task() method to return
an event object.