added md5 implementation straight port from c

first iteration of Md5 implementation. This is an almost verbatim port of the [c version on wikipedia](https://en.wikipedia.org/wiki/MD5#Simple_implementation).
The idea is to make it more idiomatic Rust in future iterations, but please add comments to this implementations if you wish, and I'll try to incorporate them now.
msg is a potentially big message that is allocated in a Vec. The intent of closing the block at that point was to free the allocated memory as soon as msg was no longer needed. The c program I was porting had "free" at that point.

That was the intent.... but I'm still not expert enough with Rust to tell if this code is actually doing what I think it should do.
In any case, not much happens after that point, so the difference should be minimal even if I let msg live to the end of the function... I was trying to stay as close as possible to the c version (minus the pointer arithmetic) because I was planning to try some benchmarking of the two versions, before starting to make the Rust version a little more idiomatic (but probably also a little slower)