Hash and equal algorithms for struct and array types

Also ban a few more types from comparisons.
Do you happen to know the rationale for libgo/gccgo's alternative approach to hash algorithms? The gc approach seems much nicer, where mixing is done in the runtime code. Also runs of "memhash"able fields are collapsed to single calls. Not blocking this, just curious.