Course upload improvements

Allow uploading courses directly with one method call
Course files can now be passed in as any IO-like object
This was super confusing for me to read through the first time, perhaps we can rename the `path` variable to something like `file`? Just thinking for later understandability.