Remove deleted_at from all models

We were not using the deleted_at column, nor were we using a
"shadow" table model, so there's no real point in having the
column. We use real deletes, not fake deletes.

We plan to have an audit log table that stores create, delete, and
update audit records of all important models. Data can be restored
if needed from such a table manually.
Merge pull request #16 from jaypipes/groups

Remove deleted_at from all models
Add unique constraint on org for nested sets
Cleanup of slug-setting and catch duplicate users

Changed the way that the slug setting routine was called. No longer
using a constructor hook, but rather calling ModelBase.set_slug()
explicitly on both creation and update.

These changes uncovered a bug on procession.db.api.user_update() that
was not catching updates to user name for integrity constraint
violations on the slug or user name columns, so this patch adds a test
for that condition.
Merge pull request #17 from jaypipes/groups

Cleanup of slug-setting and catch duplicate users
Move organization_get_subtree next to other org get methods
Merge pull request #18 from jaypipes/groups

Move organization_get_subtree next to other org get methods
Make organization slug include parent slug

This patch changes the way that organization slugs are
constructed and the indexing on the organization table to ensure
that there are proper indexes on all frequently search attributes.

We put a unique constraint over:

organizations (org_name, parent_organization_id)

Which serves to enforce the uniqueness contract we want, which is
that no two organizations that have the same parent or no parent
share the same organization name.

In order to make the slug field unique, we change the construction
of the slug field for organizations to prepend the parent
organization's slug field to the organization name of the new node.
This essentially makes the slug field into a sort of path enumeration
model, enabling URIs for organizations that model the organization
tree that the organization is contained in.

For example, assume this set of organization tree:

A1 -> B1 -> C1

Then the URI with slug for C1 would be:

GET /organizations/a1-b1-c1
Merge pull request #19 from jaypipes/groups

Make organization slug include parent slug
Adds DB API calls for managing organization groups

CRUD support for organization groups.
Merge pull request #20 from jaypipes/groups

Adds DB API calls for managing organization groups
Minor log message and copyright header cleanups
Adds API resource routing for /organizations

Wire up the /organizations router in the API.

Also, to simplify testing, made some changes to the DB API that added
the commit kwarg to all delete methods and changed the default to be
True. This allowed me to take the session.commit() manual calls out of
the HTTP API resource object methods.
Merge pull request #21 from jaypipes/groups

Adds API resource routing for /organizations
Plumb /organizations/{org_id} into HTTP API

Adds /organizations/{org_id} routing to the REST API.

Also includes a refactoring/simplification of the test_resources.py
tests, using a patcher method on the base test case class to avoid
repetitive calls to mock.patcher.start and addCleanup.
Merge pull request #22 from jaypipes/groups

Plumb /organizations/{org_id} into HTTP API
Implements update group API

Completes Issue #33 (Implement procession.db.api.groups_update)

Adds DB and REST API support for updating an organization group.
Merge pull request #34 from jaypipes/groups

Implements update group API
Rename organization_groups_get to groups_get
Add shortcut for /organizations/{org_id}/groups

Adds an OrgGroupsResource that provides a simple shortcut router
for getting and inserting groups in a specific root organization.

Closes Issue #24 (Plumb /groups resource into the REST API)