Add explicit transaction management for customforms schema creation

For some reason, using Django's transaction.commit_on_success() context
manager was not sufficient to prevent the "current transaction is aborted"
error on future queries.  Looking at SQL logs, it appears that the
database is already in a transaction when the CREATE SCHEMA query is run.
This is no problem by itself.  However, after the query failed (e.g. when
the schema already existed), Django was not rolling back the transaction.
I believe this is because our custom query didn't cause the database
backend to set its _dirty flag, but I'm not sure.

Anyway, this replaces the context manager call with an old-style
try/except with explicit commit and rollback.  An extra commit is run at
the beginning in order to flush any existing transaction.

The database backend is now accepted as an argument to create_schema(),
just to allow code reuse in our migration (see next commit).

We wouldn't have noticed this problem if customforms.install() (and all of
the other install() methods) were called only once, but that is a separate
issue.
Use create_schema() function in migration to avoid duplicate code
Fix indentation on create_schema()