Simplified MD5DigestContext and SHA1DigestContext.

I replaced explicit passing of IntPtrs to P/Invoke functions with
struct types passed by ref.
Improved MD5DigestContext and SHA1DigestContext.

Instead of manually allocated IntPtrs, I am now passing byte[]
parameters by ref to P/Invoke functions.
Fixed a minor bug in DigestContext.
Added SHA256DigestContext.
Minor fixes to MD5DigestContext and SHA1DigestContext.
Implemented SHA512DigestContext.
Minor fixes to the DigestContext subclasses.