Course upload improvements

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