Relax DLPack stride requirements
Gentle ping.
- Allows dimensions with size=1 to have arbitrary stride (this is required for compatibility with [PyTorch](https://github.com/pytorch/pytorch/blob/fea683491eb11ae1726a2ca0b4b558825025ce7a/aten/src/ATen/DLConvertor.cpp#L230-L239), which sets all such strides to 1).
- Allows empty tensors to have arbitrary strides.
- This logic matches that of [Numpy](https://github.com/numpy/numpy/blob/b052950e2fa02a09c02530fb790485b73bcc2d04/numpy/core/src/multiarray/flagsobject.c#L115-L137).
- Also adds a check that byte_offset == 0.
- Adds tests to verify the stride logic and round-trip DLPack-->Tensor-->DLPack conversions.



cc @nluehr @pjannaty 