Fixes failure when md5sum does not exist

The command `test -x $MD5_PATH` exits cleanly when `$MD5_PATH` is not set.[^1]
Consequently, it wasn't falling back to `md5` or `digest` when `md5sum` was missing.

The command, `which` actually isn't in the POSIX spec at all, but the alternatives `type` and `command -v` aren't entirely consistent in their behavior.

So instead, we try to get the checksum of `/dev/null` (which, by definition, should always be zero length [^2]) in several different ways.
If the resulting checksum is what we expect, then we assume that the method was valid and use it to calculate the checksum of our file.

[^1]: This is the appropriate behavior of `test` with one argument, per POSIX.1-2008 (IEEE Std 1003.1-2008), Vol. 3 (Shell and Utilities), Issue 7, Line No. 107540
[^2]: POSIX.1-2008, Line No. 6403: "Reads from /dev/null shall always return end-of-file (EOF)."
Fixes failure when md5sum does not exist

The command `test -x $MD5_PATH` exits cleanly when `$MD5_PATH` is not set.[^1]
Consequently, it wasn't falling back to `md5` or `digest` when `md5sum` was missing.

The command, `which` actually isn't in the POSIX spec at all, but the alternatives `type` and `command -v` aren't entirely consistent in their behavior.

So instead, we try to get the checksum of `/dev/null` (which, by definition, should always be zero length [^2]) in several different ways.
If the resulting checksum is what we expect, then we assume that the method was valid and use it to calculate the checksum of our file.

[^1]: This is the appropriate behavior of `test` with one argument, per POSIX.1-2008 (IEEE Std 1003.1-2008), Vol. 3 (Shell and Utilities), Issue 7, Line No. 107540
[^2]: POSIX.1-2008, Line No. 6403: "Reads from /dev/null shall always return end-of-file (EOF)."