Implement packing and unpacking for DTSZ type
Add missing comments to make the code consistent
Add missing length check when unpacking DTZ values
Replace the Value namedtuple by a proper class with __slots__

This results in more idiomatic code and allows for better docs and
addition of methods later on.