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 need for throwing an exception since we can rest assured `this ≠ otherObject` holds when we arrive here, and thereby have a valid answer to return. The `null` case is comparable to `!(otherObject instanceof HashResult)` case (even better: `!(null instanceof HashResult)` always holds. so we can effectively entirely skip the null check here).

I don't think that I've ever come across an implementation that throws an NPE in `equals`, now I think of it.

`return false;` is more appropriate here, or even better, skip this entire check (the next check will do it for you).