(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.
Merge pull request #19 from aperiodic/nc-106-updating

(NC-106) Update group fields.