Fix MD5 authentication

The original MD5toHex signature - MD5toHex(in void[][] data...) - causes
the generation of an incorrect MD5 hash.  Fixed this using a different
signature - MD5toHex(T...)(in T data).

Also, the generated MD5 hashes must use lowercase hex digits to ensure
the second hash matches the PostgreSQL hash.