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.