Models: Update to match SQL

refs #7303
connect_and_remove_transfer_files: delete full transfer from ES

Previously, this function queried the database for a list of files in
the transfer, and removed those specifically. However, since the
search index contains many files that aren't in the database (such
as logs and metadata files), this left dangling files that could
never be removed.

Instead query the database for transfers, then delete all files in ES
from each of those transfers.

refs #7357
use generic version of elasticSearch remove files method

refs #7357

When deleting files from the ElasticSearch index, take
advantage of the change in commit c0eb597c630a482ffcb8b2056b04f3f605265114
that provides a more generic remove method.
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
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
insertIntoDerivations: source and derived files are mandatory
databaseFunctions: add docstrings
databaseFunctions: add tests
main.models: add FilesIDs model
Move getUTCDate, getDeciDate to databaseFunctions

refs #7137