Refactor opal_permission_revoke

- refactor
- create docstrings
- handle cases where permission_revoke table does not exist or is empty
- Process other projects if one project fails with a known error
rename OpalUploadError to KnownError
Start moving shared code to opal_tools_lib
Update setup.py to include new tools/libs

Previously setup.py wasn't including opal_upload and opal_permission_revoke, include those as well.
Refactor opal_upload and opal_permission_revoke to share code

Also switch separator for opal_upload files from underscore to dot.
Fix blob upload

opal_upload now properly handles binary blobs in tables