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. 
Your argument for not *having* to check for the same length is valid.

Any reason for not using `MessageDigest.isEqual(result, otherHash.result)` or something similar here? This code fully duplicates that functionality.