Ports changes to models and model tests along with some settings changes...

... from feature/tracks_activation
The intent of lazy-loading was two-fold: first to reduce the overhead of checking for the CourseSettings object to just the places where we care about it being instantiated (as opposed to a database access per TLT-launch), and second to simplify the reasoning process surrounding whether or not it is instantiated.  Basically, the only times we care whether or not the CourseSettings object exist for a course is when we access it, and since we need to perform this check at some standard point in the code, the best point for that is when we would be reading or writing from it.  If we start accessing CourseSettings many times per TLT-launch, then switching it may be warranted, but I figured this way left us with simpler logic and better performance for the system's current behavior.