Some usability ideas around SkTHash.

  - By default, use new SkGoodHash to hash keys, which is:
    * for 4 byte values, use SkChecksum::Mix,
    * for SkStrings, use SkChecksum::Murmur3 on the data,
    * for other structs, shallow hash the struct with Murmur3.
  - Expand SkChecksum::Murmur3 to support non-4-byte-aligned data.
  - Add const foreach() methods.
  - Have foreach() take a functor, which allows lambdas.

BUG=skia:

Review URL: https://codereview.chromium.org/1021033002
diff --git a/tests/ChecksumTest.cpp b/tests/ChecksumTest.cpp
index 6248678..3658bd7 100644
--- a/tests/ChecksumTest.cpp
+++ b/tests/ChecksumTest.cpp
@@ -50,3 +50,16 @@
         }
     }
 }
+
+DEF_TEST(GoodHash, r) {
+    ASSERT(SkGoodHash(( int32_t)4) ==  614249093);  // 4 bytes.  Hits SkChecksum::Mix fast path.
+    ASSERT(SkGoodHash((uint32_t)4) ==  614249093);  // (Ditto)
+
+    // None of these are 4 byte sized, so they use SkChecksum::Murmur3, not SkChecksum::Mix.
+    ASSERT(SkGoodHash((uint64_t)4) == 3491892518);
+    ASSERT(SkGoodHash((uint16_t)4) ==  899251846);
+    ASSERT(SkGoodHash( (uint8_t)4) ==  962700458);
+
+    // Tests SkString is correctly specialized.
+    ASSERT(SkGoodHash(SkString("Hi")) == 55667557);
+}