Transfer bag: fix fileOperations functions names
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
Characterization: update FITS command

This deactivates the old placeholder FITS command, and adds a new one
that calls FITS using the new characterization feature.
FPR rules: update FITS executable name
dicts: encode originallocation to avoid encoding problems

refs #6911
ReplacementDict: operate on all strings as str

This is consistent with the behaviour used in the transcoder module
before.

Because the %originalLocation% file variable can contain text of
arbitrary encodings (or even invalid combinations of encodings), it's
a minefield to try to interpolate its value into any unicode string.
Instead, handle all strings as bytestrings (encoding from unistrings
to bytestrings where necessary) and return str instances instead of
unistrings.

Consumers can convert back into unistrings, with the caveat that the
returned string is not guaranteed to be valid Unicode regardless of
the encoding of the source string.

refs #6911
normalize: replacement_dict should be ReplacementDict instance

Passing ReplacementDict instances into CommandLinker ensures that RD
instance methods are available there.

refs #6911
transcoder: use existing replacement_dict methods

Previously, transcoder was using its own implementations of a few of
the ReplacementDict methods. Instead, accept the ReplacementDict
instance passed in from the normalize client script and call its
methods.

refs #6911
dicts tests: SIP is usually assigned even for file-only
normalize: fall back to default rule for unidentified files

Fixes #6910.
Display Archivematica version in administration

refs #6640
Bump Archivematica version to 1.2.0
Add examineContentsChoice watch directory
Add new TranscribeFile microservice

refs #6565