Add `test` client module

This can be used to branch conditionally within microservice chains;
for instance, uncompressed AIP processing has a microservice which
branches the chain based on `test -d %SIPDirectory%%AIPFilename%`.
CompressAIP: handle uncompressed AIPs

If an AIP is uncompressed, most of the processing here can be skipped;
only the parts that touch the database need to be run.

refs #6589
Make AIP compression optional

If an AIP is not compressed, then an uncompressed directory will be
sent to the storage service instead.

refs #6589
Skip writing pointer files for uncompressed AIPs

refs #6589
Verify AIP: only try to uncompress if AIP is compressed
IndexAIP: separate extraction code, handle uncompressed AIPs

refs #6589
StoreAIP: make sure AIP path is /-terminated

If the AIP path is not slash-terminated, then the storage service will
store the directory inside a directory of the same name.

refs #6589