Factor out plot adding and fix issues

Opening this PR ASAP due to https://github.com/OpenTreeMap/OTM2/issues/1717, but it needs more documentation, testing, and integration with other bugfixes.
I found this difficult to follow. Partly because of the function names (`hasValueMap` sounds like a predicate -- does this thing have a "value map"?) and partly because higher-order functions require staring at. (Naming is a challenge with higher-order functions because it's hard to pick a meaningful verb.) To me this would be clearer:
```javascript
function mapValues(stream, field) {
    var hasValue = R.and(R.not(_.isUndefined), R.not(_.isNull));
    return stream.map(field).filter(hasValue)
}

var newTreeIdStream = mapValues(form.saveOkStream, '.responseData.treeId'),
    newTitleStream = mapValues(form.saveOkStream, '.responseData.feature.title'),
    newAddressStream = mapValues(form.saveOkStream, '.responseData.feature.address_full');
```