Fix hash randomization

See issue #19. This will try to keep names sensible (for "trivial" types) if based on data values even when hash randomization is enabled, and will fall back to the `str(value)` mechanism if hash randomization is either not present (older Python versions) or explicitly disabled.