Hashing API

Here is the Hashing API I have written as part of my GSoC project. PreferredAlgorithms includes all my benchmarks except for Signatures as that requires my SigType enum. Benchmarks are based off of what I found that was already in the codebase. 
If I use 10k iterations for everything, it takes around 3 min to run all of the benchmarks. I don't think we want to increase a nodes start up time by three min. Should I let some be use more iterations are others fewer?