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.
I realize that we currently do not support realtime kernels, but that support will come as soon as someone writes patches for it. `kernel_fpu_begin()/kernel_fpu_end()` turns off interrupts inside the critical section, which is undesireable on realtime systems. We likely should have a module option to allow this to be disabled on such systems. We might even want to make flipping it on the default on realtime systems if there is a kernel CPP flag that we can use to detect them at build time.