Make is_plot return True in more applicable cases

fixes #1652 on github
Merge pull request #1667 from steventlamb/bug/1652_fix_popup_cache

Make is_plot return True in more applicable cases
Fix broken UI tests

* UI tests were making plots outside the instance bounds (`make_instance` had a default radius of 300 units WebMercator)
* `make_instance` now takes a `radius` argument, and the UI tests set it to 10000
* Also simplify management tests by using the `radius` argument
* Clean up imports in UI tests
* Add `wait_until_visible` for safety in `_click_delete`
* Fix misplaced `json_api_edit` in `delete_tree_view`
Merge pull request #1669 from RickMohr/fix-ui-tests

Fix broken UI tests
fix lint
Fix overstrict assertion
Merge pull request #1675 from steventlamb/topic/fix_duplicate_csv

Fix overstrict assertion
Add numeral library for number formatting.
Update styling for modeling popups.
Merge pull request #1676 from kdeloach/topic/modeling-formatting

Update styling for modeling popups
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
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
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.