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. 
Alright. I'm just a bit concerned that the contract of that method does not guarantee anything, so that in theory there may, at any point, exist JVMs that implement this wrong. I guess I'm just being too paranoid about that ☺