Redmine #6180: Introduce libyaml integration.

With readyaml() and parseyaml() functions.

Based on pull request #2028 in CFEngine core repository.
Modified by Kristian Amlie <kristian.amlie@cfengine.com>
I wasn't able to trigger these, I believe they are true ProgrammingErrors.  Here is my code, please add it to the acceptance tests as `parseyaml_abuse.cf`:

```
#######################################################
#
# Abuse parseyaml()
#
#######################################################

body common control
{
      inputs => { "../../default.cf.sub" };
      bundlesequence  => { default("$(this.promise_filename)") };
      version => "1.0";
}

#######################################################

bundle agent test
{
  vars:
      "strings" data => parsejson('
[
 "- valid",
 "xyzzz",
 "- xyzzz",
 "[xyzzz]",
 "- { xyzzz: }",
 "xyzzz: { p: 100 }",
 "- p class=\\"some class\\" id=\\"some-id\\": abusing the free naming of properties in YAML.",
]');

      "n" slist => getindices(strings);

      "load_$(n)" data => parseyaml("$(strings[$(n)])");

      "load_s_$(n)" string => format("%S", "load_$(n)");

  reports:
    EXTRA::
      "parsing $(n) = $(strings[$(n)])";
      "convert $(n) = $(load_s_$(n))";
}

bundle agent check
{
  methods:
      "any" usebundle => dcs_pass("$(this.promise_filename)");
}
```