Create a SystemDescriptionFactory module for the RSpec tests

The module is available in all specs and allows to easily create
SystemDescriptions either in-memory or in a temporary
SystemDescriptionStore on disk. It also allows for
storing raw descriptions which aren't compatible with the code anymore.

Example for creating a simple description in-memory:

  create_test_description(json: "{}", name: "name1")

More complex example that uses the temporary store:

  describe Foo
    initialize_system_description_factory_store

    it "does something to the description" do
      description = create_test_description(
        store_on_disk: true,
        json: test_json
      )
    end
  end
Extract the JSON loading into a separate method

That will be relevant in the following commits regarding the migrations,
where we want to have the raw JSON instead of a full description.
Implement the Migration base class

The Migration class is the base for all migrations. It implements a
"#migrate_description" method which takes a system description name and
applies all relevant migrations on it.
Lazily load migrations from schema/migrations when needed
Require migrations to describe their purpose

Migrations have to describe their own purpose using the "desc" class
method, e.g.

  class Migrate1To2 < Migration
    desc <<-EOT
      Add 'foo' element to the system description root.
    EOT

    def migrate
      @description.foo = true
    end
  end

Migrations which didn't call "desc" will trigger a MigrationError when
they are called.
Implement "machinery upgrade-format" command

This command allows for upgrading the format version of a specific
description or all descriptions at once.