DEV: Refactor uppy plugin interfaces (PR #14275)

This abstracts interaction with uppy for uppy plugin classes into base classes for Preprocessor and Uploader plugins, so anyone making these uppy plugins doesn’t have to think as much about uppy underneath the hood. This also makes the logging and validation nicer, and provides a more consistent way to emit progress and completion events.


Looks good. A description of how to consume the API would be nice, but can easily be a separate PR.

Looks like a nice refactor! :+1: