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.
MCPClient: Remove DashboardSettings dependency

Giving the MCPClient access to the dashboard UUID via replacement dict
& environment variable was a branch of code development that was not
followed up on. Remove it to reduce table dependencies of the MCPClient.
Models: Update to match SQL

refs #7303
MCPServer: replace databaseInterface with django models
Unit classes: move some methods into superclass

Also switch from databaseInterface to Django models.

refs #7137.
databaseFunctions: use Django models

refs #7137
fileOperations: use Django models

refs #7137
elasticSearchFunctions: use Django models

refs #7137
storageService: use Django models

refs #7137
backlogUpdatingTransferFileIndex: remove unused functions
MCPClient: use Django models

refs #7137
jobChainLink: print to stderr, don't print stderr
localDevSetup: replace databaseInterface with Django models
identifyFileFormat: file_.sip won't raise
createSIPfromTransferObjects: fix subsequent runs

If this script runs more than once, the SIP objects directory will
already be populated with some files. Make sure the contents of
objects/ is a directory before trying to list its contents, otherwise
this will fail.
dicts: don't try to expand path if sipdir not defined