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. 
No, this is **not** what we are currently doing. Read `src/freenet/crypt/MultiHashInputStream.java` and `src/freenet/crypt/MultiHashOutputStream.java`, and closely watch the `digest = null;` immediately after the recycle.