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. 
Why would an application ask for "hey, I don't care what algorithm you use, just give me some hash of my data"? Making this too easy (like this constructor does) would let lazy programmers make assumptions on the value of `defaultType`. IMHO it's better to leave it up to the programmer to specify `PreferredAlgorithms.preferredMessageDigest` as `HashType` if he really wants this behaviour.