support MD5.clone() and SHA.clone()

This adds support for the MD5.clone() and SHA.clone() methods. In testing, it resolves the error that occurs when one of those methods gets called and then the clone gets updated with additional data; but I still see a "socket not open" error when a certain consumer tries to write to a TCP socket, which may be an issue in this code.

I would make this not dependent on the array type using byteLength instead of length. I think we could put this method in a util.js file because it's probably going to be useful for other things too.