Courses API

This is a subset of #6109. The goal here is to trim the code down to exactly what will be needed by Insights and get it merged soon. We will revisit the other APIs soon after so that the edx-solutions fork isn't too divergent.

@mulby @mattdrayer @cpennington @ormsbee @dsjen @smagoun @shnayder @mikigoyal 
Yeah, it probably is. Sometimes using `debug` is useful since it does not show up unless the logging level is lower than `INFO`. However, they should be used like this:

```
logging.debug('course_module = %s', tab_module)
```
This way, the string format is only done when the logging level is adequate and there is minimal performance impact.