Course upload improvements

Allow uploading courses directly with one method call
Course files can now be passed in as any IO-like object