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. 
How can an integer specifying a maximum allowed key length be an algorithm provider? The `max` variable is only assigned to but never read. Do you want to check something w.r.t. that max? Use it somewhere? If not, then there's not point in assigning it, unless `Cipher.getMaxAllowedKeyLength("AES")` has some interesting side-effects, which should then be explained in comments.