genhash: clean up the hash algo generalizing step

Access to the hash-specific context was simplified as I've now checked
some C guarantees regarding union/it's members initial address vs.
aligning so now extra inlined accessor function is needed.
This simplified the code a bit.

Also now the hash-specific object is directly pointed to by SOCK object
instead of carrying just the index to the table of hashes and doing
the respective access via a global again and again.

Next, I've concentrated some hash-related declarations to the new hash.h
file.  This was mostly motivated by a need to break the circular include
dependency that have arisen.  As a consequence, part of the recent clutter
I brought in was removed again.  Most of FEAT_SHA1 conditional compilation
is here.

Previously separated table in main carrying the hash IDs to be printed
in the help screen was merged into the table carrying all the other
necessary information about the particular hashes.

Signed-off-by: Jan Pokorný <jpokorny@redhat.com>