implemented entity locking

The DDRLocalEntity.add_file() function will involve moving files
around and directly editing the entity.json file.  This change
adds an entity.locked bit, lock/unlock functions, and checks
for lock status in the relevent views.
DDRFile.__init__ and .from_entity; exif->xmp

The previous DDRFile.__init__ was too tied to loading as part
of the entity.from_json function.  The new __init__ makes it
easier to instantiate a DDRFile object when the files aren't yet
in the proper places in the filesystem.
make it easier to use ddrlocal.models.file.hash from other modules
added func for extracting XMP data from a file

NOTE: Uses Python XMP Toolkit, which returns a Python dict
rather than XML.  If we want to write XML to the METS file we'll
need to figure out how to do that or look for a different tool.