Use bulk_create in add_default_permissions() to speed up unit tests
Make Plot's CRUD operations work for other map features
Add CRUD endpoints for features

Also:
* (most of the changes), use "feature_id" instead of "plot_id" in view funcs and URL matching
* Organize plot/feature URLs a little better, and add names for URLs that lack them
Respond to reviews
Filter stewardship edits based on the logged in user's permissions

It was incorrectly using the user *filter* as the user to check the
permissions of.  For the instance-wide edits page, this is usually 'None'

Fixes #994
Add unit tests for udf collection edits view
Merge pull request #1072 from maurizi/fix/stewardship-edit-logs

Filter stewardship edits based on the logged in user's permissions
Fix unit tests - model_id's value depends on test order, so don't check it
Merge pull request #1073 from maurizi/fix/stewardship-edit-logs

Fix unit tests - model_id's value depends on test order, so don't check it
Merge pull request #1064 from RickMohr/crud_map_features

Add CRUD operations for map features
Switch from underscore to lodash.  Closes #622

Also switches from underscore-style chaining to lodash style chaining
Go to plot detail when clicking on a different tree on the minimap

Close #1063
Merge pull request #1074 from maurizi/topic/1063/clickablePlotMiniMap

Add the ability to go to another plot detail by clicking on the minimap
Fix broken unit test due to merge conflict
Minor linting stuff
Support boundary queries

The search framework inserts geometry literals directly into the
query. This presents two problems for the eco service endpoint:

1) There were 10k character being sent in the query string via a GET
request. Solution: Use a POST request.

There are a few oddities worth pointing out here:
  * The ecoservices rest framework expects a json payload to have
  "text/plain" for the content type
  * The previous endpoint would append multiple 'param' parameters like:
     eco.json?....&param=4&param=9...
    Now there is code that specifically looks for and manages the
    "param" key

2) Django serializes the geometry to EWKB

The serialized format isn't great for over the wire json
transfers. Instead we send it as EWKT which requires some acrobatics
Use "mapfeature" as the model for geom searches
Allow address search after polygon search

We support arbitrary address search by detecting when a typeahead did
not match a valid choice. In such a case a 'data-unmatched' attribute
was set on the typeahead.

The code looked something like:

```js
inputStream($input)
  .combine(idStream.toProperty("").skipDuplicates(),
    firstIfSecondIsEmptyElseEmpty)
  .onValue($input, 'attr', 'data-unmatched');
```

However, the idStream sticks on the last value which is what led to this
bug. For instance, if idStream was set to '2900' because of a successful
match the combinator would never trigger the `onValue` with a proper
values.

The solution is to `merge` the streams. Whenever a selection is made the
`data-unmatched` attribute is cleared and whenever a change is made to
the input it is put back.

Fixes #1062
Merge pull request #1082 from ahinz/topic/lint

Minor linting stuff
Use django-queryset-csv package