(maint) Test for created objects in 201 responses.

We weren't testing that 201 responses for node and group creation return
the created object in their bodies, so add tests for those.

Remove all uses of clojure.walk/keywordize-keys from the http tests;
instead just instruct chesire's json parse function to keywordize the
keys when parsing.

Also remove a println from the http tests.
(NC-130) Add API docs.

Add documentation for the routes & allowed methods that currently exist;
namely creating and retrieving nodes, environments, and groups; creating
rules; and retrieving classes and node classifications.

It is possible currently to create classes through the API, but this
mainly exists to allow us to test the API. Once we can receive class
information directly from Puppet, we will only be using those class
definitions and that API route will disappear. Therefore, the
documentation does not cover the class creation operation.
(maint) Don't look for node when classifying.

There's no further information that the node object in the database
could give us, since the only attribute of a node is its name which is
supplied in the request.
(NC-106) Add deep-merge, merge-and-clean utils.

deep-merge merges maps such that nested maps are also merged, rather
than simply replaced.

merge-and-clean does a deep merge and then deletes paths of the merged
map that lead to a nil value.
(NC-106) Add update-group storage method & tests.

Given a delta to an existing group (that must have a :name key whose
value matches the group to update), modifies the classes, class
parameters, and variables of the group as specified in the delta. Paths
mapped to nil by the delta are deleted, any other value is updated or
inserted as appropriate.

The update transaction requires the stricter "repeatable read" transaction
level, since it does multiple select-like statements that should all see the
same sets of rows. Since this transaction can fail if concurrent transactions
change the sets of rows these statements would operate on, the whole transaction
is retried up to three times on such failures before we give up.
(NC-106) Add route to update group with a POST.

Allow updating a group via HTTP. Updates are just like creation
requests, except instead of containing the whole group in the body, they
just contain a delta. Paths that lead to a nil value in the delta are
deleted, others are inserted/updated as appropriate. Only classes, class
parameters, and variables in a group delta are processed; all other
attributes are ignored.

Add documentation on doing an update, describing the semantics of
deleting things from the group by using null values.
(NC-107) Update environments of groups.

Just do a whole-sale update of the environment_name field in the group,
group_classes, and group_class_parameters tables. Foreign-key
constraints will blow up if the classes the group sets parameters for
don't exist in the new environment, or do exist but don't have all the
parameters that the group sets. In the future, this would be a good
occasion to refresh our view of puppet's classes for the target
environment.
(NC-107) Acceptance test for group env updates.

Also test that when updating a group's environment fails, we get an
message in the response telling us what is missing from the database
that we assumed was there.