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
Also, if you add `__bool__` to the class, then people can do things like `if block.validate(): do stuff`.

    def __bool__(self):
        return self.is_empty