Simplify how extent offsets are computed.
Avoid compiler warnings on OpenCL 1.2 capable devices.
Correctly compute alignment for the OpenCL backend.
Avoid creating sub buffers of sub buffers in the OpenCL backend.

Although permitted by many implementations it is a violation
of the standard.  Further, we also change how sub buffers are
created in order to work around a deficiency in pyopencl.