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. 
`MessageDigest.isEqual` may be vulnerable to timing attacks (its specification provides no guarantees on this, and at least the OpenJDK 6-b14 implementation was vulnerable: see http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/security/MessageDigest.java#MessageDigest.isEqual%28byte[]%2Cbyte[]%29])