sha256 x86_64 optimization v2

This is a revision of https://github.com/zfsonlinux/zfs/pull/2332

Currently, the optimization only applies to kernel space,
because I haven't figured out how to it properly in user space.

AVX2 is untested because I don't have such CPU.
So use it with you own discretion.
Using a writeable function pointer here will break PaX builds. The PaX plugin was designed to break builds when writeable function pointers like these are used because they can be written with the address of arbitrary code. It would be better to have an enum that is set based on the test results and then used to select the correct function via a switch statement.