first pass at entity and file delete views/templates/etc
entity delete view and tasks mostly done (needs UI work)

- View and task are working: the specified Entity is deleted and
  the proper changes are made to collection control and changelog.
- Alert messages in UI don't have collection or entity IDs.
entity delete view and tasks mostly done (needs UI work)

- View and task are working: the specified Entity is deleted and
  the proper changes are made to collection control and changelog.
- Alert messages in UI don't have collection or entity IDs.
polished entity,file delete UI

- Fixed vars and links in alert messages.
- Hooked up the "delete" buttons.
prevent duplicate file uploads per entity-role

Because files are named {repo}-{org}-{cid}-{eid}-{role}-{sha1},
it was possible for users to upload the same file to a given
entity-role combination more than once. When this happened the
file was not changed (it had the same SHA1) but metadata was lost
and users could accidently delete the file entirely when trying
to fix the problem.

This change prevents uploading duplicate files.

- The SHA1 generation step is moved to the beginning.
- SHA1 is passed in to dest_filename generator function to avoid
  generating it twice.
- An exception is thrown if there's a duplicate.
- Celery failure messaging was updated to display Exceptions.
detect duplicate files for entity-role, give user opt to remove

- Function goes through entity.files dicts; duplicate files will
  have the exact same path_rel,sha1sha256,md5,role,public.
- Display alert on entity detail page with a link to dedupe page.
- On dedupe page, display list of duplicate files.  User can click
  to remove dupes.
This last page is not functional yet.
mv Entity files dicts-to-objects code into function

The code takes the list of file info dicts from entity.json,
copies it, and then replaces it with a list of file objects.
This function will also be used by the remove-duplicates function.
remove duplicate files from Entity on user request

- Functions for detecting duplicate files and for removing them.
- View code for informing the user about duplicates, asking for
  confirmation, and removing them.
added explanatory note to Entity.detect_duplicate_files()
only load entity if an entity.json file exists

Sometimes entity metadata files are deleted but the entity
directory is not.  Collection.entities() only checked to see if
the directory exists before trying to load.
Merge branch '063-delete'