Add extents<N> class

This adds an extents<N> class which stores an array of n-dimensional
extent values. This can be used to represent an ND-range for launching
an OpenCL kernel or for storing the size/shape of a 2D/3D image.

Also adds a variadic dim() function which provides a concise syntax
for creating extents<N> objects.