Require std::has_unique_object_representations for SkGoodHash

Fixes one type in Graphite (SamplerDesc) that had padding bits that
theoretically could have caused hash misses. Because of the types that
use it internally to DrawPass, it was simpler to update SamplerDesc to
be directly hashable.

Adds an `SkForceDirectHash` template for key types to opt into if they
want to use `SkOpts::hash_fn` but aren't technically unique (often due
to their use of floats in the key). This was to make migrating easier
since the components that require it are in Ganesh and the PDF backend, but the intent is not to use SkForceDirectHash for new key types.

Change-Id: I5f486284dd836c80e93372323bd08d7efae2b0f7
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/667956
Reviewed-by: John Stiles <johnstiles@google.com>
12 files changed