Use a flag to determine whether to lint files in grunt watch
Tweak moderation table header width

63px worked on my dev deploy, but the contents of the btn-group still
appeared stacked on the release deployment until I bumpped it to 64px.
Fix photo review accept/reject and pagination JS.

Design changes broke JS selectors.  I fixed the pagination selectors by
removing 'ul' from the selector, and I added data attributes to the
elements used by accept/reject to hopefully make them less brittle.

Fixes #1639, Fixes #1640
Add back accidentally removed lint to comment poster

Fixes #1605
Merge pull request #1643 from maurizi/fix-photo-review

Fix photo review accept/reject and pagination JS.
Merge pull request #1645 from maurizi/comment-moderation-fix-user-link

Add back accidentally removed lint to comment poster
Make settings.py into a package

The reason for doing this is that it is problematic to have a single
settings.py that is responsible for introduce new settings, handling
overrides, and initializing code paths that use settings.

The problem that turned up is that settings that are *introduced* lower in
the lexical layout than the statements for responsible *overriding*
settings are left incapable of overrides. Any statement placed in the
canonical default settings should be subject to overrides, unless
explicitly setup to not allow them. We accumulated a bunch of settings
that a developer may wish to override during development but cannot
easily do so.
Merge pull request #1654 from steventlamb/topic/make_settings_package

Make settings.py into a package
Merge pull request #1656 from maurizi/fix-unit-tests

Fix unit tests broken by 1e78a5df7
Convert UDF collection values to YYYY-MM-DD when saving.

Fixes #1657
Merge pull request #1659 from maurizi/fix-udf-collection-date-saving

Convert UDF collection values to YYYY-MM-DD when saving.
Merge pull request #1661 from OpenTreeMap/release

Merge Release into master
Merge pull request #1633 from maurizi/no-lint-watch-option

Use a flag to determine whether to lint files in grunt watch
Convert UDF collection values to YYYY-MM-DD when saving.

Fixes #1657
Merge branch 'release'

Merging release back to master after cherry-picking 1f0f44e17f to ensure
that the next merge from master to release can be ff-only.
Properly integrate our UDFManager with django-hstore

Previously, the UDFWhereNode inherited directly from GeoWhereNode.
Because of this, hstore queries for 'contains' were not being handled by
django-hstore.

This meant that when we did
`Plot.objects.filter(udfs__contains=['Field Name'])` expecting to retrieve
all Plots which had UDFs with the name 'Field Name' in their UDF dict,
using the hstore '?' operator, what we actually ran was the standard 'LIKE'
operator, searching for "%['Field Name']%".

Because of this, deleting UDF fields did not actually delete any values for
that UDF field.  This made it impossible to edit any objects which
contained those deleted UDFs.

Most of the code for generating SQL for accessing hstore columns is now
delegated to the django-hstore library.  One small change was made, which
is in
https://github.com/azavea/django-hstore/tree/cast-lvalues-to-rvalue-type
Fix UDF deletion and add migration to delete any values already present

Because we were not correctly wiring our custom manager into the HStore
manager this contains clause would not have worked before.

Experimentation shows that the syntax being used before deleted some but
not *all* UDF values.

In particular, UDFs with the key of the deleted field name and a value of
None were still present after the UDF was deleted.
Add forensic fields to ExportJob

This will make it a lot easier to understand what's going on with our
export jobs.
Add and use decorator `json_api_edit`
Merge pull request #1664 from steventlamb/bug/user_export_timeout

Add forensic fields to ExportJob