Move tests out of an __init__.py

These tests weren't getting run! They worked if you said `nosetests
web/__init__.py`, but just running `nosetests` skipped over them.
Catch DataErrors during flush, and rollback [#7]

Note that this appears to be unnecessary on postgresql 9.1. Looks like
9.3, however, checks length constraints (a sqlalchemy DataError) before
check constraints (a sqlalchemy IntegrityError). Thus, no tests.
Silence a warning

The celery process was vomiting up a huge enormous warning:

    [2014-12-09 02:42:30,419: WARNING/MainProcess]
    /Users/andrewlorente/Envs/catsnap/lib/python2.7/site-packages/celery/apps/worker.py:161:
    CDeprecationWarning:
    Starting from version 3.2 Celery will refuse to accept pickle by
    default.

    The pickle serializer is a security concern as it may give attackers
    the ability to execute any command.  It's important to secure
    your broker from unauthorized access when using pickle, so we think
    that enabling pickle should require a deliberate action and not be
    the default choice.

    If you depend on pickle then you should set a setting to disable this
    warning and to be sure that everything will continue working
    when you upgrade to Celery 3.2::

        CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml']

        You must only enable the serializers that you will actually use.
All form elements should have bootstrap classes [#24]

Ensures consistent look and feel, etc
manual semicolon insertion
Slightly-cleaner jquery element-creation

Just shorten the code some by moving element attributes into templates.
Use .call() rather than _.bind()()

Just more idiomatic JS is all
Disable add-image inputs on submit [#21]

Should help with the problem of double-submitting images.
Merge branches 'no-double-submit', 'more-rollbacks' and 'bootstrap-class-audit'