Fixed HashAlgorithm not enforcing State and cases where the hash is re-Initialized before return

Fixed HashAlgorithm not enforcing State when reading HashValue.
     in TransformBlock State is != 0 and a call to TransformFinalBlock is required before the hash is valid and readable.
There were also 2 places where Initialize was called before the HashValue was read.
It now copy the hash instead of returning a pointer to it.
Initialize is called in TransformFinalBlock and HashValue is reset to 0.
      Tested in a console application in VS2013 with Ms.Net and Initialize is not called.

This change is released under the MIT license.