Fix MD5 hashing on binary data

Version 2.2 of Paul Johnston's MD5 implementation does not handle binary data properly. So taking a md5 binary digest, appending data, and then doing a md5 with the result fails to yield correct results.

Version 2.1 does work properly, and has a good track record in production use (it's used in things like Strophe.js, etc).


Includes updated tests to check that empty strings are handled, and that iteratively hashing a binary digest works correctly for all algorithms.