Add structure for handling local & remote packages

Package functions need to be able to work with a package locally (ie to
extract and return files), but the package may not be stored locally.  To
help solve this, add a Package.local_path temporary attribute.  Whenever a
function needs to work with a package locally, call Package.get_local_path,
which will populate and returne Package.local_path, fetch the package into
the SS internal location if necessary.  If the package is fetched,
local_path_location set.

To work better with local_path, extract_file defaults to extracting to SS
internal location and no longer returns a temp folder to be deleted.

Related changes:
* download_file endpoint update to check is_compressed
* download_file & LOM update for extract_file change
* many places that used full_path use get_local_path()
Update browse to use child spaces

Browse functionality is dependent on what protocol the Space is, so
move the implementation to the child spaces.  If no child space
implementation is found, try browsing locally.
Added API-related fields to pipeline model/form.

Add hostname, API key & username to Pipeline model & form. Display in
pipeline template, with default values if none provided. Allow pipelines
to post API information, but do not display it if queried. Try to guess
a pipeline's IP if it requests default setup.  Update migration.
Minor fixes
Add reingest button and endpoint

refs #6488

Add endpoint and button to Packages list for re-ingest. Reingest form
added so user can select which pipeline to reingest on as well as the
type of reingest.
Implement reingest start

refs #6489

Fill out the stub of reingest on the Package model. Reingest copies the
package to SS internal location, extracts it if it's a file, copies a
subset of files to the pipeline's currently processing location, then
deletes the temporary copy.  The METS is always a required file, and all
objects (preservation and original) are required for access reingest.
We only create access copies from originals now, but will from
preservation in the future.
Fix reingest folder copying

refs #6488

Folders must be /-terminated to copy properly.
Call approve reingest endpoint in dashboard

refs #6488

Copy the reingest files to a staging directory on the pipeline, and call a
SIP reingest endpoint to notify Archivematica.  This allows the pipeline to
do some pre-processing of the SIP, such as clearing the database of old
information.

Enable PATCH for pipelines, specificially so that 'reingest' can be reset by
the pipeline.
Add fixity check

refs #6488

Run fixity before starting reingest of AIP.  Update for extract changes and
not assuming the package is locally accessible.

Squash with 'Implement reingest start'?
Stub out finish_reingest AIP

refs #6488

Add PUT to support finished reingested AIPs, and subclass obj_update to
call finish_reingest if it's a reingested AIP.  PATCH limited to only fields
listed in allowed_patch_fields, currently just 'reingest'.
Work on finish_reingest AIP

refs #6489

Fix obj_update to work better with PATCH and PUT.  Filled out rough
implementation of finish_reingest.

Squash with 'Stub out finish_reingest AIP'?
Consolidate event generation for pointer files

Move event and agent generation for pointer files to utils, and add a
wrapper function that handles everything for adding events.
Update pointer file in reingest

refs #6488

Update checksum and add another compression event after reingest.
Compression event information is stubbed out.

Squash with 'Stub out finish_reingest AIP'?
Package: add new compress_package instance method

This supports features such as downloading entire AIPs for
uncompressed AIPs.

Note that this currently only tarballs the file without performing
actual compression.
Update compress_package for get_local_path changes
compress_package accepts compression algorithm parameter

Add compression constants to Package class for algorithms supported by
Archivematica.  Update compress_package to take a parameter for which
compression algorithm to run and use that.
Reingest AIP: recompress based on reingested compression

refs #6498

Update reingest to parse the compression algorithm out of the reingested
pointer file and use Package.compress_package.

To handle a different compression algorithm resulting in a different
package name (eg .7z vs .tar.bz2) or the AIP being stored in a different
location, do not update the current_path or current_location in the
PackageResource.  Reingest endpoint will reset the current location & path
to match the DB, and pass in the reingest location & path, to be updated
once the package has been successfully reingested.

Squash with 'Stub out finish_reingest AIP'?
AIP Reingest: Update pointer file

refs #6498

Update pointer file for reingested AIP.  Notably: fixity checksum,
FLocat, size, and several compression related fields.  Move pointer
file changes to own function.