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 
It's breaking iff the contract for the API says that the data is permanent. If the contract for the api is specific about the guarantees that are being provided (like, "this api may return `null` for fields which no longer exist"), then the client needs to be responsible for handling the possibility of the data no longer being available.