This change adds a Hasher type that implements hash.Hash. It
has to keep a trailing stripe because the finalization step
ends up reading up to a stripe from the end of the buffer after
a full block has been consumed.
In order to implement it, a new accumBlock function was introduced
that does the first part of the hashLarge function that operates
on full blocks. It's possible that we can reduce the amount of
internal state the hash has to keep to 2 stripes instead of 17
stripes at the cost of more accumBlock calls. That's is left
for further work and investigation.
Additionally, there was a lot of reorganization around how the
architecture specific code was laid out. This should help me
stop pushing changes that break other architectures because I
forgot build tags or whatever. There's now a `make vet` check
that runs `go vet` on different GOARCH values. So far, that
has been able to catch every silly mistake I've made doing
that. It also helps reduce some duplication by making the cpu
feature flags constants on unsupported architectures so that
the compiler can just dead-code eliminate some branches.
Fixes #7.