replace JSON digests file encoding with custom CSV-like encoding

This change moves to custom encoding and decoding of the digests
hash.  This is done b/c we cannot control the order of the keys
that are encoded with JSON.  This means that each time you write
the digests, the digest file changes due to order changes.

This won't work well with the pattern of checking in digest files
to source control.

Using this custom CSV-like encoding, we can sort the enties to
give a more deterministic digest file output.