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. 
Please don't use comments for revision control. If this is unfinished code, don't include it (you can create a branch for this if you wish to add it later on).
Also holds for the next couple of lines that are commented out.