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. 
For DSA signing in particular I need a RandomSource. And for nonce and iv generation I need a SecureRandomSource (don't remember the exact super class). I'll have to think of a different way to do it since it's unsafe.