Improvements to install machinery

Moves print statements inside install() methods, so they get printed
whenever the install occurs, even if it isn't as a result of a
post_syncdb signal.

Improves the idempotence of the install() methods.  The code would not
create duplicates of initial data.  However, if the data already had
duplicates, then get_or_create() would fail because it found more than 1
result.  The solution is (in cases where the values of the fields are
not constrained by the model to be unique) to first check for existence,
and then go ahead with creation if the objects don't already exist.

Puts customforms.models.create_schema() under manual transaction
management.  Before, if we weren't already under transaction management
and inside a transaction, the first call to commit_manually() would
fail.

Adds a program.models.install() method, to call
program.models.class_.install().  Now all install() methods can be
called via app.models.install().

Removes unnecessary calls to program.modules.models.install() and
cal.models.install() from inside ProgramFrameworkTest.setUp().

Calls make_user_admin() from users.models.install(), rather than
makeRole('Administrator').
Adds management commands to help with site updates

``./manage.py recompile_theme`` will recompile the theme.

``./manage.py update_deps`` will update all the site dependencies.

``./manage.py install`` will run all of the app.models.install()
functions to install initial data.

``./manage.py update`` will run the above three commands, as well as
syncdb, migrate, and collectstatic.  This can be run when checking out a
different branch for a code review, after updating your version of the
main branch, when performing a code release on a production site, etc.
Merge pull request #1331 from learning-unlimited/install

Improvements to installing initial data and updating sites