func sliceUI64(in []byte) []uint64 {
	return (*(*[]uint64)(unsafe.Pointer(&in)))[:len(in)/8]
}
This makes a new slice of uint64 that points to the same slice passed in as []byte.
We should check alignment for architectures that don't handle unaligned reads and
fallback to a copy.
Unclear is we guarentee the same hash for different endianess.
package jenkins264
import (
	_ "fmt"
	"hash"
	"unsafe"
)
func mix64(a, b, c uint64) (uint64, uint64, uint64) {
	a = a - b
	a = a - c
	a = a ^ (c >> 43)
	b = b - c
	b = b - a
	b = b ^ (a << 9)
	c = c - a
	c = c - b
	c = c ^ (b >> 8)
	a = a - b
	a = a - c
	a = a ^ (c >> 38)
	b = b - c
	b = b - a
	b = b ^ (a << 23)
	c = c - a
	c = c - b
	c = c ^ (b >> 5)
	a = a - b
	a = a - c
	a = a ^ (c >> 35)
	b = b - c
	b = b - a
	b = b ^ (a << 49)
	c = c - a
	c = c - b
	c = c ^ (b >> 11)
	a = a - b
	a = a - c
	a = a ^ (c >> 12)
	b = b - c
	b = b - a
	b = b ^ (a << 18)
	c = c - a
	c = c - b
	c = c ^ (b >> 22)
	return a, b, c
}
func mix64alt(a, b, c uint64) (uint64, uint64, uint64) {
	a -= b - c ^ (c >> 43)
	b -= c - a ^ (a << 9)
	c -= a - b ^ (b >> 8)
	a -= b - c ^ (c >> 38)
	b -= c - a ^ (a << 23)
	c -= a - b ^ (b >> 5)
	a -= b - c ^ (c >> 35)
	b -= c - a ^ (a << 49)
	c -= a - b ^ (b >> 11)
	a -= b - c ^ (c >> 12)
	b -= c - a ^ (a << 18)
	c -= a - b ^ (b >> 22)
	return a, b, c
}
func mix64a(a, b, c uint64) (uint64, uint64, uint64) {
	a -= b - c ^ (c >> 43)
	b -= c - a ^ (a << 9)
	return a, b, c
}
func mix64b(a, b, c uint64) (uint64, uint64, uint64) {
	c -= a - b ^ (b >> 8)
	a -= b - c ^ (c >> 38)
	return a, b, c
}
func mix64c(a, b, c uint64) (uint64, uint64, uint64) {
	b -= c - a ^ (a << 23)
	c -= a - b ^ (b >> 5)
	return a, b, c
}
func mix64d(a, b, c uint64) (uint64, uint64, uint64) {
	a -= b - c ^ (c >> 35)
	b -= c - a ^ (a << 49)
	return a, b, c
}
func mix64e(a, b, c uint64) (uint64, uint64, uint64) {
	c -= a - b ^ (b >> 11)
	a -= b - c ^ (c >> 12)
	return a, b, c
}
func mix64f(a, b, c uint64) (uint64, uint64, uint64) {
	b -= c - a ^ (a << 18)
	c -= a - b ^ (b >> 22)
	return a, b, c
}