Use "class << self" syntax for methods in SystemDescription

Replace "self.<method-name>" syntax with "class << self" syntax in
SystemDescription. This is needed because I'll introduce a private class
method in the next commit, which can't be done with the original syntax.
Extract SystemDescription#validate_json

We'll have more validation code soon, so it's worth to have a special
method for it.
Don't save version metadata for descriptions without format version

Saving version metadata for old descriptions without format version
resulted in JSON like this:

  {
    "meta": {
      "format_version": null
    }
    ...
  }

I'd rather like "format_version" not to be present in this case (so that
we can say it must always be an integer if it is there).

Saving old descriptions happens only in the tests, so this is quite an
edge case, but I think that cleaner and more consistent description
saving code can't hurt.
Implement JSON Schema validation of system descriptions

The validation only validates global description structure, not scope
data. This will be done in the next phase.

Note the validation doesn't require descriptions to have the "meta" key.
This is to accomodate old incompatible descriptions.
Merge pull request #121 from SUSE/global-json-schema-2

[Review] Request from 'dmajda' @ 'SUSE/machinery/global-json-schema-2'