(maint) Use root cause for generic 500 errors.

Improve the utility of the catchall error middleware by having it use
the exception's root cause, if possible.
(maint) fix indentation in acceptance test
(NC-192) Improve group name uniqueness error msg.

When the client tries to create a group that violates a database
uniqueness constraint, return them a 409 Conflict response that explains
which fields of the group violated the uniqueness constraint, the values
of those fields, and the name of the violated constraint.

This is implemented by introducing a new exception-catching middleware,
`wrap-uniqueness-violation-explanations`, that catches a slingshot
exception thrown by `create-group*` whenever the group creation
transaction throws either:
  - a PSQLException with the postgres uniqueness_violation error code;
  - a BatchUpdateException whose root cause (the last exception in the
    chain) is the above.
(NC-192) Add more checks for uniqueness violations.

Factor out the uniqueness error handling into something reusable, and
use it to improve error messages on any transaction where we might run
into a uniqueness violation. Since keeping the offending entity around
all the places we want to use this is a bit of a hassle, remove that
from the exception handling and the error response returned to the
client.

None of the changes to the transactions in postgres.clj are functional,
they're just indentation changes due to the wrapping.
Merge pull request #58 from aperiodic/nc-192-uniqueness-violation

(NC-192) Uniqueness Violation
First draft of API index doc
Merge pull request #59 from holguinj/apidocs

API Documentation Index
(maint) Bump http-client dependency

This fixes an annoying warning about get being overridden
(NC-157) Error when a group is its own parent
(NC-157) Detect inheritance cycles larger than one group
(NC-157) Detect cycles in get-ancestors
(NC-157) Make sure cycles can be fixed

Test that you can break a cycle by altering the parent_id of a group in the
cycle. This required making get-subtree* not follow cycles involving the root
of the subtree. It is not protected from cycles further down the subtree.
(NC-157) Include offending cycle in the inheritance-cycle exceptions
(NC-157) Return a nicer error in the JSON for cycles
(NC-157) Document error response for group inheritance cycles
(NC-157) Refactor get-ancestors

Clean up the conditionals in get-ancestors a bit
(NC-157) Clarify and refactor code around get-subtree

This refactors get-subtree slightly, refactors the tests around it, and adds
some clarifying documentation.
(NC-157) Use name instead of UUID for inheritance-cycle message

Since the full groups are included in the details key, using group names
instead of the UUIDs in the plain english error will probably be more user
friendly without introducing too much ambiguity.
Merge pull request #60 from pcarlisle/nc-157-strict-hierarchy

(NC-157) Detect inheritance cycles in groups
(NC-191) Return a better error when a group parent is missing