Files module: upload to arbitrary services (#655).

BREAKING CHANGE

Client-side Files API:
{{{
dm4c.get_plugin("de.deepamehta.files").open_upload_dialog(upload_url, callback)
}}}

The first parameter of the `open_upload_dialog()` method is now `upload_url` (instead of `path`). As argument the full URL (with or without host) is passed. Thus the user-selected file can be uploaded to any service, not just the `/files` service.

Example: uploading a file to a (fictitious) import/export plugin and invoking its "import" method:

...open_upload_dialog("/import-export/import", callback)

At server-side the plugin receives the upload by providing a resource method which consumes `multipart/form-data` and has `UploadedFile` as the entity parameter.

{{{
import de.deepamehta.plugins.files.UploadedFile;

@Path("/import-export")
@Produces("application/json")
public class ImportExportPlugin extends PluginActivator {

    @POST
    @Path("/import")
    @Consumes("multipart/form-data")
    public ImportedFile importFile(UploadedFile file) {
        ...
        return new ImportedFile(...)
    }
}}}

The resource methods can return any object which is JSONEnabled. That object is received at client-side as the argument to the callback method (as specified in the open_upload_dialog() call).

Note: while `ImportedFile` is a fictitious class in this example, the `UploadedFile` class is provided by the Files plugin.

See #655