Edit user URL uses ID not username

refs #6674

Django's 'reverse' bails on characters that are not alphanumeric or -
(including . and @).  Update user-related URLs to use the ID instead of
the username, as some special characters are allowed in the username.
Update buttons to be consistent style

All buttons have class 'btn' on them, so they are styled by bootstrap,
instead of being browser default.  Submit and related 'default' actions
are 'btn-primary' (colored blue).
Add custom endpoint decorator for Tastypie

We have several custom endpoints that implement the same boilerplate
logic.  Add a decorator that implements that, such as checking allowed
methods, authentication, fetching the detail resource, deserializing
the body and providing it to the endpoint as a bundle.
Update custom endpoints to use decorator

Custom endpoints should use new decorator to reduce boilerplate code
and return useful errors if the requested object doesn't exist.
Package.extract_file can extract the whole package

Extract_file now takes an optional extract path which defaults to a
temp directory, and omitting the relative path extracts the whole
package.
Cleanup fixes

Misc fixes: rename PACKAGE_TYPE_[EXTRACTABLE|DELETABLE] to
PACKAGE_TYPE_CAN_[EXTRACT|DELETE] to make easier to extend with other
categories.  Import locations.forms module, instead of each form
separately, so it is easier to add new forms, similarly for models in
forms.py
Add misc attributes to Packages

Package has JSONField that stores misc attributes than need to be tracked,
but are not common enough to deserve their own fields. Update migration.
Added LOCKSS-o-matic stubs

refs #5425

Added a Space class for the LOCKSS-o-matic.  Functionality relating
to LOM on the changes to the METS file are stubs, since those
requirements not yet decided on.

Updated store AIP and download file functions to work with LOM, and
added a stub callback function for when LOM is done storing the file.
Added a new status for a package for when it is on the Storage Server,
but not yet in LOM.

Split chunks of an AIP are found at <aip_uuid>/download/<chunk_number>/
LOCKSS Space can parse service document

Add function to fetch and parse a service document, update the au_size and
collection_iri.

Added dependency on sword2 client library. Github version is newer and more
featureful than the version on PyPI. Install dependency from github.
Add common NSMAP

Add a common namespace map for use when working with METS and XML.
Update existing lxml code to use it. Add ipython as a development
dependency.
Create AtoM entry for AIP

refs #6009

Create the AtoM entry with the title, ID, agent, and description of the
AIP. Title, agent and description parsed from the METS file Dublin Core
title, description and an 'organization' agent.  Extract state IRI for
polling LOCKSS-o-matic from the deposit receipt.
Update LOCKSS-o-matic service doc and resource creation

refs #6009

Update LOCKSS handling of service document and atom entries to create
resources to match API changes.

Add checksumType parsing to service document.  Resource creation uses
lom:content tags, add checksum and checksum type to content tags.

Code moved to LOCKSS Space from Package, since it deals more with
Space-specific problems than Package.
LOCKSS WIP - edit & state IRI

refs #5425

Properly parse the edit and state IRIs from the deposit receipt.  Add sword
and Lockss-o-matic related namespaces to the namespace map.  Start on
polling for state, comments and logs where work needed.
Initial LOCKSS tests

Add pytest and pytest-django as testing dependencies.  Add testing fixtures
- initial data needed for everything, and a lockss-o-matic specific one.
Start on adding tests; currently only work if the modified simple sword
server is running.
Update for LOM changes

refs #5425

Update namespace for LOM, and make common.utils the only place it is
defined.  Add content provider ID, input by the user, and used to identify
the SS to LOM.
File splitting for LOCKSS uses tar

refS #5425

Splitting the file into chunks of no more than au_size uses tar instead of
split.  A tar file has headers and stores some of its own metadata, making
it a safer choice.
Update Lockssomatic to use new infrastructure

refs #5425

Update Lockssomatic to use (post) move to/from storage service.  Removed
now duplicate _store_aip_lom.  Store AIP calls post move functions.
Sizes to/from LOM are in kB

refs #5425

maxUploadSize in the service document, and lom:content size in the atom
entry are both in kilobytes, while all internal sizes are stored in bytes.
Add unit conversion.  Outgoing size rounded up.
Save State & Edit IRI in Packages.misc

refs #5425

Save state & edit IRI from deposit receipt into the misc attributes field
of Packages.
Add package Update Status button for LOCKSS

refs #5425

Add button to check the status of a Package.  Calls update_package_status
in Lockssomatic Space, which queries the state IRI and sets it to success if
all the server states are 'agreement'.