WIP: validation message generalizations

@talbs I have these code changes (which are not close to being ready for code review!) on my sandbox. Here is a test course you can use (staff@example.com):

http://studio.cahrens.m.sandbox.edx.org/course/brian/brian/brian

I wrote up several questions and thoughts in https://openedx.atlassian.net/browse/TNL-704

There are also some comments directly in component-validation-messages.underscore
I would just compute this as a property:

    @property
    def is_empty(self):
        return not self.detailed_messages