Implement wait_group_events builtin v2

This is a simple default implemetation which just calls barrier().

v2:
  - Only call barrier() once.
Implement async_work_group_strided_copy builtin v2

This is a simple implementation which just copies data synchronously.

v2:
  - Use size_t.
Implement async_work_group_copy builtin v3

This is a simple implementation which just copies data synchronously.

v2:
  - Use size_t.

v3:
  - Fix possible race condition by splitting the copy among multiple
    work items.