added hashcode, equals, and toString to CachedValue