extract json_edit variable for brevity
extract parse_node_data variable for brevity
rename CROWBAR_FILE to CROWBAR_JSON for consistency
add json_read
json-edit: add --no-clobber option

This will allow us to preserve values set manually in /etc/crowbar/*.json,
whilst still providing sensible defaults for values not set manually -
for example, DNS forwarders and ssh authorized keys.
avoid duplication when handling custom JSON, and honour custom provisioner JSON

This will allow us to configure an external SMT server by placing appropriate
configuration in /etc/crowbar/provisioner.json, e.g.:

    {
      "attributes": {
        "provisioner": {
          "suse": {
            "autoyast": {
              "repos": {
                "SLES11-SP3-Updates": {
                  "url": "http://smt.suse.de/repo/$RCE/SLES11-SP3-Updates/sle-11-x86_64/"
                },
                "SLES11-SP3-Pool": {
                  "url": "http://smt.suse.de/repo/$RCE/SLES11-SP3-Pool/sle-11-x86_64/"
                }
              }
            }
          }
        }
      }
    }
json-edit: allow key elements containing '.', by backslash-escaping

    ./json-edit -a 'foo.2\.0.bar' -v 'value' test.json

will now result in:

    {
      "foo": {
        "2.0": {
          "bar": "value"
        }
      }
    }

This is now required since we will be enumerating repositories to be
included in autoyast.xml generation from meta-data contained in
provisioner.json, and we want to key that meta-data by repository
name to avoid requiring an extra set of repository keys.  Repository
names can be things like "SUSE-Cloud-2.0-Updates", hence the need for
allowing JSON key elements to contain ".".

There is a corresponding commit in the barclamp-provisioner repository
adding the same behaviour to parse_node_data.
skip local repo checks if external SMT server is configured
Merge pull request #1887 from aspiers/external-smt

https://github.com/crowbar/crowbar/pull/1887

Merged by devtool for cloudsleuth