Use a flag to determine whether to lint files in grunt watch
Style changes for displaying scenarios histogram in sidebar.
Merge pull request #1632 from kdeloach/topic/histogram-sidebar

Style changes for displaying scenarios histogram in sidebar.
Pull comments JS out of mapFeature.js and add AJAX posting of comments

In order to avoiding having to changing core parts of the Django comments
app or bringing in another commenting library like django-fluent-comments,
this gets the *entire* plot detail page when adding a comment, and then
strips out the comment section from it and replaces that HTML content.
Merge pull request #1649 from maurizi/ajax-comments

Add AJAX posting of comments
Show the instance boundaries during the add process

During the "enable placing" phase of adding a map feature, we show the
instance boundaries are stop the marker from tracking the mouse once
outside the boundaries.

This gives a good visual indication of where to place things in the most
likely time for a plot to be added outside the instance boundaries
Add validation to prevent adding features outside the instance

 - The add tree process will return to the first step that had an error
 - For convenience, geom errors are returned as "mapFeature.geom"
 - On the plot detail, geom errors are at the top of the form

Fixes #1625
Merge pull request #1638 from maurizi/prevent-adding-outside-bounds

Prevent adding map features outside instance bounds
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
Fix unit tests broken by 1e78a5df7
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
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.