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. 
From this description and the Javadoc of `addBytes(…)`, I'd expect
```java
Hash h = new Hash(…);
h.addBytes(bytes1);
h.addBytes(bytes2);
byte[] result = h.getHash();
```

to be equivalent to

```java
Hash h = new Hash(…);
h.addBytes(bytes1);
h.getHash(); // ignore this return value
h.addBytes(bytes2);
byte[] result = h.getHash();
```

but that does not seem to be the case: this method seems to *reset* the digest as a side-effect as well. If  my understanding is correct, please emphasize this in the documentation, and maybe even rename the method so it is immediately clear that this function has the aforementioned side-effects.