simplify Cache::cache() by introducing ForeignValue

ForeignValue follows NullObject pattern