(NC-123) Boolean expression rules.

Allow rules to be full-on boolean expressions. Conjunctions and disjunctions
must contain at least one term.
Merge pull request #25 from aperiodic/nc-123-booleans

(NC-123) Boolean expression rules.
(NC-137) Add group ids.

Groups now have an id field, which must be a random (version 4) UUID.
Groups can be retrieved, updated, or deleted via their ID rather than
their name, but must be created via their name. When creating the group,
the entity returned in the 201 response should be the group as stored
(i.e. with the UUID). In order to accomodate this, the Storage
protocol's create-* functions must return the object as created, and
mock Storage implementations in tests should follow that.

Add Acceptance tests for using UUID in place of the group name when
updating, retrieving, or deleting.

Rplace the get-group and delete-group methods of the Storage protocol
with get-group-by-name & get-group-by-id and delete-group-by-name
& delete-group-by-id, respectively, in order to be explicit about the
identifier used to select the group.

Since the group route differ from the other CRUD resource routes due to
the need to distinguish between the cases where name or UUID is given in
the URI, the group route now uses its own handler rather than one
created with http/crud-resource. This allows the crud-resource function
to be slightly simpler, and it has been renamed crd-resource since it
does not allow updating.

Add a schema for the deltas passed to update-group, to guarantee that
they have one of either :id or :name keys.

Modify the uuid? utility to recognize UUIDs, and add ->uuid to coerce
values to UUIDs when possible.
(NC-137) Update API docs for group UUIDs.

Note where the UUID can be used interchangeably with the group's name.
Merge pull request #27 from aperiodic/nc-137-group-guids

(NC-137) Group IDs
(NC-106) Acceptance test for group deletion
Merge pull request #28 from aperiodic/nc-108-delete-groups

(NC-106) Acceptance test for group deletion.
Add method to render seqs for liberator.

Our method uses cheshire, rather than clojure.data.json, since cheshire
knows how to serialize java.util.UUIDs to seqs.
(NC-136) Nuke ini utilities, use kitchensink's.
(NC-136) Update to TK 0.3.2 so we can use new KS.

Updating KitchenSink brings in a new version of clojure.tools.cli with
incompatible semantics that broke TrapperKeeper, so update to a new TK
that uses the new clojure.tools.cli so we can use the new KS that has
the deep-merge utility.

Change the line that the acceptance test waits for to decide that the
server has started, since the new TK WebserverService has slightly
different output.
Merge pull request #29 from aperiodic/nc-136-utils

(NC-136) Update TK, use KS utils
Add puppetmaster url to configuration
(NC-133) Synchronize class definitions from puppet

This adds the ability to retrieve class definitions from puppet and merge them
with the internal definitions. A new endpoint at /v1/update-classes accepts a
POST request with no body to trigger this.

This depends on features in Puppet 3.5, which is unreleased. In order to test
this, the integration test code now allows installing development builds of
puppet.
(NC-133) Add integration test for multiple updates to puppet class definitions
WIP: Fix undeleting things