Experimental Policyfile support

Adds experimental, opt-in support for using Policyfiles to drive chef policy. Currently hard-codes "compatibility" mode, which means that policyfiles are stored in data bag items on the chef-server, and the standard cookbook API is used to fetch cookbooks. To support flexible cookbook management workflows, a field "dotted_decimal_identifier" is added to the `cookbook_locks` section of the policyfile; cookbook objects are fetched at the URL `"/cookbooks/:cookbook_name/:dotted_decimal_identifier". Therefore, "normal" cookbook versioning can be used by putting the x.y.z version number in this field, while alternative cookbook versioning can be used by assigning cookbooks custom version numbers on upload.

Additional supporting documentation can be found in this repo: https://github.com/danielsdeleo/chef-workflow2-prototype

I have successfully completed a chef-client run using this feature, with a data bag item like this (lots of cookbook lock entries omitted for succinctness:

```json
{
    "id": "hello_world",

    "run_list": [
      "recipe[build-essential::default]",
      "recipe[dan-github::default]",
      "recipe[dan-vim::default]"
    ],

    "cookbook_locks": {
      "ruby_build": {
        "identifier": "95609576.180795908.164102522",
        "version": "95609576.180795908.164102522",
        "dotted_decimal_identifier": "95609576.180795908.164102522"
      },
      "runit": {
        "identifier": "124491194.149076892.48770812",
        "version": "124491194.149076892.48770812",
        "dotted_decimal_identifier": "124491194.149076892.48770812"
      }
}
```
A note about this data. I uploaded these cookbooks with `knife-boxer` which computed the version numbers based on the cookbook content. The "identifier" and "version" fields are not used by the policy file feature right now (it's intended that the "identifier" field will be used to fetch cookbook version objects once the server supports it), so I just repeated the version number there.