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. 
Multi-threading is not an option, that would kill the validity of the benchmarks. Assuming `MessageDigest.update()` will usually be the most expensive operation, 10k invocations of that method per benchmark should do the trick. Note however that this might or might not be the case: I don't know of the gory details involved, it's just a suggestion.

Since you are measuring the *minimum* time required, there are not overly many iterations needed after warmup, neither do you need a separate warmup phase.

Your benchmarks are currently benching digests/macs of 32KB blocks: is that indeed the input size we would see most regularly on normal node usage? (defining "normal" is left as an exercise for the reader)