strided_ptr and const_strided_ptr

Looks like a pointer, but with optionally non-default strides
array_view, array_view_strided, array_view_strided_mutable

array_view encapsulates non-owning, non-mutable ptr+length to an array
with bounds.

array_view_strided[_mutable] encapsulates non-owning, non-mutable or
mutable, ptr+length+strides for a strided array with bounds.
image_view, image_view_mutable

Encapsulate a reference to a 2D or 3D multi-channel image, with strides.
Test array_view, strided_ptr, array_view_strided, image_view
array_view and friends: eliminate separate 'mutable' versions.

Just one template for each, use blah_view<T> for mutable and
blah_view<const T> for non-mutable (constant underlying data values).