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 
Category filtering assumes all assignments share the same category. Sadly they do not. The only way I have found to determine if a nose is an assignment is to find all the problems and look up one level.