Dashboard: replace Base64 with atob/btoa

The current JavaScript-based base64-encoding library we're using in
Archivematica and the storage service mishandles certain Unicode
codepoints. This corrupts certain strings when decoding/encoding, and
makes it impossible to roundtrip all data. For example:

	Base64.decode("8J+Yhy3wn5iP") // => "ߘ筰", not "😇-😏"

This replaces the vendored Base64 library with thin wrappers around the
native JavaScript atob/btoa functions. Those functions are available in
Firefox, Chrome, Safari, and Internet Explorer 10+.

Fixes #7698.
Entry filter in browse is configurable

The filter to determine which files/folders are displayed when browsing the
storage service (ie starting a transfer) is now a parameter, instead of
builtin.  Default is still to display folders but not files.
Ingest: Add metadata files structure

Add page to upload new metadata files from.
Ingest: Add metadata files javascript

Add endpoint to copy metadata files. Add JS and templates to display
the browser to select files.
METS: Cleanup handling of parsed metadata from CSVs

Clean up data to be sane before passing to helper function. Adjust
helper function parameters and return value to work better with reingest.
Support metadata files added during Ingest

refs #6488

When writing the METS, check for a metadata.csv added to the SIP,
in addition to ones from the originating transfers.  Add conversion
of metadata.json to metadata.csv for files added during ingest.

Move metadata reminder to before processing metadata directory, so new
files are processed.
Manual Normalization: normalization.csv uses pre-sanitized path

refs #4922

Before parsing the normalization.csv, fetch the unsanitized name from the
database and match on that to disambiguate between files with the same
name. Do not force lowercase before matching. Catch multiple exceptions
properly.
createMETS: Remove fileSec sorting

Sorting caused problems when dealing with non-Unicode filenames, and is
unnecessary for the METS. Removed sorting and PyICU dependency. Moved
fileSec creation to one loop, instead of generating separate ones for files
and directories, as they no longer need to be custom sorted.
Unify Unit ReplacementDict creation code

In the past, each Unit class had its own logic for creating
replacementDicts. This meant that the available unit variables for a
given job was dependent on the type of unit class that was spawning
the job, and introduced the possibility of other inconsistencies.

For Archivematica 1.2, a new constructor for ReplacementDict had
already been created which used the database to populate a common set
of fields; this is used by every other place in Archivematica that
creates and consumes ReplacementDicts for this kind of task, including
every client script (normalization, identification, etc.)

The File unit is the only unit which retains its original constructor,
and only as a backup. The new constructor depends on the database, but
the File unit has to spawn several jobs before files are ever added to
the database. The old minimalistic ReplacementDict is kept as a
fallback for this case only; as soon as every file is assigned a UUID,
the new ReplacementDict can be used.

refs #6451
Units: cleanups