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.
PR fixup - update to latest version of fork, add support for contains
Jshint fixups for unit tests.
Update grunt to jshint test scripts.
Adjust z-index only when adding boundary polygon to map

This allows other pages to have polygons which display above plot tiles rather than below.

Also add comment about doing it better in Leaflet 0.8
Merge pull request #1677 from RickMohr/boundary-polygon-z-index

Adjust z-index only when adding boundary polygon to map
Fix bad regex in the ecobackend, and raise better error messages

We use regexen to match failures from the ecoservice with their root cause

This regex was failing to match NMtnPrFNL, because it started with two
capital letters.

I've also changed the error parsing to raise a human readable error instead
of the rather cryptic message we get from HTTPError
Merge pull request #1683 from maurizi/fix-broken-tree-details

Fix bad regex in the ecobackend, and raise better error messages
Merge pull request #1663 from maurizi/fix-udf-undeleted-fields

Fix UDF deletion and delete fields that should be gone
Merge pull request #1671 from kdeloach/topic/jshint-tests

Update Gruntfile to jshint unit tests.
Pass old_model_dict through migrator

This is necessary if you need to access some otm1 data to make decisions
Add registrationprofile to migrator
Merge pull request #1685 from steventlamb/topic/migrate_registrationprofile

Topic/migrate registrationprofile
Only generate source maps via grunt-watch if --dev flag is used.
Merge pull request #1686 from kdeloach/topic/grunt-static-dev

Only generate source maps via grunt-watch if --dev flag is used.
Unhook duplicate user csv endpoint
Give duplicate user csv view a better name
Merge pull request #1687 from steventlamb/topic/dupl_user_csv

Topic/dupl user csv
Refactor UI tests to be simpler