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.
Instead of appending to a String, you should just use `write!(f, __)`, e.g.:

    write!(f, "{:02x}", *b)

This should be faster than your version, as it will not do any memory allocations.